my %f; for my $file ( @files ) { open my $IN, '<', $file or die "Cannot open '$file' because: $!"; while ( <$IN> ) { /^(.*)\t(.*)$/ && $f{ $1 } += $2; } } open my $OUT, '>', $outpath or die "Cannot open '$outpath' because: $!"; for my $key ( sort { $f{ $b } <=> $f{ $a } } keys %f ) { print $OUT "$key\t$f{$key}\n"; }