sub compressPair(&@) { my $cr=shift; my @aResult; my $x; local $a=undef; local $b=undef; foreach (map { defined($x) ? ($x eq$_?():($x=$_)) : defined($_)?($x=$_):() } @_) { $a=$b; $b=$_; 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 = compressPairs { '(' . (defined($a)?$a:'') . ',' . (defined($b)?$b:'') . ')' } @aData; print "compressPairs: @aCompressed\n"; #output compressPairs: (,a) (a,b) (b,c) (c,a) (a,d) (d,e) (e,) (,f) (f,g)