for ($#history .. 0) { my $temp = pop @history; next if exists $history{ $temp }; $history{ $temp } ++; unshift @history; } #### my %seen; for (1 .. @history) { my $item = pop @history; unshift @history, $item unless $seen{$item}++; } #### my %seen; for (1 .. @history) { unshift @history, $seen{$history[-1]}++ ? $#history-- && () : pop @history; }