use warnings; use strict; use List::Util qw[ max ]; my %p = ( 'a' => 1 , 'm l n o p q' => 20 , 'x y z' => 321 ); my $name = max map { length $_ } keys %p; my $number = max map { length $_ } values %p; my $format = "%-${name}s %${number}d\n\n"; my $out = ''; for ( sort keys %p ) { $out .= sprintf $format , $_ , $p{ $_ } } print $out;