... my @fields = qw( SamAccountName ExpiryDate PasswordLastSet mail ); my $format = "%-25s %-25s %-25s %-25s\n"; # header fields printf $format, @fields; # underline header fields (same length as header fields printf $format, map { '-' x length $_ } @fields; my $datasets = get_datasets( $handle ); for my $set ( @$datasets ) { my %h = %$set; printf $format, @h{@fields}; }