while (<>) { # $_ holds the line read - process it here } #### ... (keys ... #### ... (sort {length $sequences{$a} <=> length $sequences{$b} } keys ... #### $ cat pm_1144803_fasta.txt >SequenceID|1234_Gene1 CTTTTAAGCTGATTAGGCTTTTATACCATTAGATTTAGTAACTATTGTCTTTTAA >SequenceID|9876_Gene2 GTGCTGTCTTAAGTTGAACAGAGTGTGGGAGGAAATATAAGCAAAGTTATTCCGTAGAATT >SequenceID|4567_Gene3 CATCCTCCTTTACACCCCACAAACATTTGGCAACCCCTGATAGGTTTCTTTCTTGTGGA #### $ cat pm_1144803_fasta_seq_len_sort.pl #!/usr/bin/env perl use strict; use warnings; my (%sequences, $seq_key); while (<>) { chomp; if (/^>/) { $seq_key = substr $_, 1; } else { $sequences{$seq_key} = $_; } } foreach my $key ( sort {length $sequences{$a} <=> length $sequences{$b} } keys %sequences) { my $len = length ($sequences{$key}); print "$key:$len\n"; } #### $ pm_1144803_fasta_seq_len_sort.pl pm_1144803_fasta.txt SequenceID|1234_Gene1:55 SequenceID|4567_Gene3:59 SequenceID|9876_Gene2:61