use strict; use warnings; ${\our %kev}{$ARGV[$_]}++ and splice @ARGV, $_, 1 for reverse 0..$#ARGV; !defined( $_ = <> ) ? do { scalar( delete( ${\our %kev}{$$_[0]} ) && open(KEV, ">", $_->[0]) xor print KEV $$_[2] ) for do { use vars '@kev'; @kev }; exit }: ( push( @{\our @kev}, [$ARGV, (split(" ", $_))[-1], $_] ), our @kev = sort { $a->[0] cmp $b->[0] or $b->[1] <=> $a->[1] } @kev ) while 1;