use strict; use warnings; use Data::Dumper; my @a = ( 2,2,2,3,3,4,4 ); my (%hash, %count); my $prev; foreach ( 0..$#a ) { my $cur = $a[$_]; warn "cur:$cur\n"; if ( ($prev && $cur != $prev || $_ == $#a) ) { my ($prev_key) = keys %count; if ( !$prev_key ||( $count{$prev_key} ) <= $hash{$prev} ) { delete $count{$prev_key} if $prev_key; $count{$prev} = $hash{$prev}; } } $hash{$cur}++; $prev = $cur; } warn Dumper \%count; #### $VAR1 = { '2' => 3 };