sub compress(&@) { my $cr=shift; my$x; my @aResult; local $_=undef; foreach (map { defined($x) ? defined($_) && ($x eq $_) ? () : ($x = $_) : defined($_) ? ($x = $_) : () } @_) { push @aResult, $cr->(); } return @aResult; } my @aData=(qw(a a a a b c c a a d e e e e), undef, undef, qw(f g g)); my @aCompressed = compress {'*' . (defined($_)?$_:'').'*'} @aData; print "compress: @aCompressed\n"; # output: compress: *a* *b* *c* *a* *d* *e* ** *f* *g*