use Benchmark qw/:all :hireswallclock/;
my $DATA = '01 fines name 2222 -P sws -1 reee.tee rrt';
cmpthese(-10, {
'rjt' => q{ $_ = $DATA; s/ (?=.*\s?-1 )/,/g; },
'pushtaev' => q{
$_ = $DATA;
my ( $left, $right ) = split /-1/, $_, 2;
$left =~ s/ /,/g;
join '-1', $left, $right;
},
});
Rate pushtaev rjt
pushtaev 1875006/s -- -75%
rjt 7582716/s 304% --
Regarding readability, it will depend who you ask in this case. In my experience, I tend to find a simple regex easier to read than tearing apart and piecing a solution back together with split, s///, and join.
Lastly, in your code, replacing this:
print join '-1', $left, $right;
... with this:
print $left, '-1', $right;
... resulted in a 32% speed improvement before I/O on your solution (still ~2.2x slower than the straight regex) and puts the terms in their natural order, which is probably more readable than the strange use of join with a delimiter to concatenate three strings.
I hope this is useful feedback to your feedback! |