#!/usr/bin/perl use warnings; use strict; use List::Util qw/max/; my $VAR1 = { 'sample.txt' => [ 'Line_1_3long', 'Line_2_3' ], 'sample_2.txt' => [ 'Line_3_3longer' ], 'sample_3.txt' => [ 'Line_4_3', 'Line_5_3', 'Line_6_3evenlonger', 'Line_7_3', ] }; my %maxlength = (); foreach my $key (sort keys %$VAR1) { $maxlength{$key} = max map { length } @{$VAR1->{$key}}; } my $maxelements = max map { $#$_ } values %$VAR1; foreach my $line (0..$maxelements) { foreach my $key (sort keys %$VAR1) { if($line >= @{$VAR1->{$key}}) { print " " x ($maxlength{$key} + 1); } else { print $VAR1->{$key}->[$line]; print " " x ($maxlength{$key} - length($VAR1->{$key}->[$line]) + 1); } } print "\n"; } #### $ perl test.pl Line_1_3long Line_3_3longer Line_4_3 Line_2_3 Line_5_3 Line_6_3evenlonger Line_7_3 $