use constant SENTINEL => '~~SOME UNLIKELY VALUE~~'; for ( push @history, SENTINEL, my $value= shift @history; $value ne SENTINEL; $value = shift @history ) { push @history, $value, $history{ $value }++ unless exists $history{ $value } }