use strict; use warnings; use Data::Dumper; my @lines; while () { chomp; $_ =~/}(\w+)/; push @lines, [$1,$_]; } @lines = sort { $a->[0] cmp $b->[0] } @lines; print Dumper \@lines; __DATA__ '\bibitem{all99}Allison P.D.' '\bibitem{al200}Vinoth B.D.' '\bibitem{al200}Ana A.D.'