sub sort { my ($INPUT, $OUT) = @_; my %data; while (<$INPUT>) { next if (/^I|A|M/); chomp; my ($id,@cols) = split ('\t',$_); push @{$data{$id}}, \@cols; } my %hash; for my $key (keys %data){ for my $aref(@{$data{$key}}){ my $sum = sum(@{$aref}); print $sum,"\n"; push (@{$hash{$sum}{$key}}, @{$aref}); } } for my $sum (sort keys %hash){ for my $key({$hash{$sum}}){ for my $aref (@{$hash{$sum}{$key}}){ print "$key\t$sum\t"; } } } print $OUT Dumper(\%hash); }