my %h; for my $file ( glob "*.[abc]" ) { my( $file_k0, $file_k1 ) = $file =~ /(.*)\.(.*)/; local @ARGV = ($file); while (<>) { chomp; push @{ $h{$file_k0}{$file_k1} }, [ split /\t/ ]; } } #### for my $file_k0 ( sort keys %h ) { for my $file_k1 ( sort keys %{ $h{$file_k0} } ) { print "File $file_k0.$file_k1 -\n"; for my $line_ar ( @{ $h{$file_k0}{$file_k1} } ) { for my $field ( @$line_ar ) { print "\t$field"; } print "\n"; } } }