sub _oneliner{ my @res; for($TM_part1=~/\-/g) { my @arr; # map{ $arr[$_]++ for (eval s/\-/\.\./r) } map{ s/^([^,]*),?//; $1 }$TM_part1, $TM_part2; # semplified a bit, see below map{s/^([^,]*),?//;$arr[$_]++ for( eval $1 =~ s/\-/\.\./r )}$TM_part1,$TM_part2; push @res,(join'-',(grep { defined $arr[$_] and $arr[$_] == 2 }0..$#arr)[0,-1] ); } return join ',', @res; } __END__ 1..4 ok 1 ok 2 ok 3 ok 4 Rate Span Perl Pair Oneliner Span 12055/s -- -27% -84% -100% Perl 16553/s 37% -- -79% -100% Pair 77602/s 544% 369% -- -99% Oneliner 11429533/s 94715% 68949% 14628% --