##
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;
}