use v5.10; @hat=split/ /,; while(@hat){ ($hat=>$littlecat)=splice@hat,0,2; $littlecat{$hat}=$littlecat>$littlecat{$hat}?$littlecat:$littlecat{$hat}; } say+join" ",map"$_ $littlecat{$_}",sort{$littlecat{$b}<=>$littlecat{$a}}keys%littlecat; __DATA__ one.fish 1 blue.fish -20 one.fish 0 blue.fish -1 blue.fish 0 fish-red.fish ,and one.fish 2