my @in = (1,2,3,4,4,4,5,5,6,7,8,9,9,1,2,3,3); ## one way my @out1 = $in[0]; do { push @out1, $_ if $out1[$#out1] ne $_ } for @in; ## or another way my $t = ''; my @out2 = grep { $t eq $_ ? 0 : ($t = $_, 1) } @in;