use strict; my %aq = map ( (lc ((/^:(.):/) ? $1 : $_) => $_) , ); foreach my $k ( sort keys %aq ) { print $aq{$k}; } __DATA__ D for Donkey B for Box B for Bubble C for Cat A for Alpha :A: :B: :C: :D: #### :A: A for Alpha :B: B for Box B for Bubble :C: C for Cat :D: D for Donkey