I'm all for TIMTOWTDI, but I wondered about performance. And it turns out that while a split version is faster for short strings, performance suffers a lot the more commas there are in the string:
use warnings;
use strict;
use Benchmark qw/cmpthese/;
my $str = join ',', 'a'..'z', 5;
my $exp_path = join ',', 'a'..'z';
my $exp_value = 5;
cmpthese(-2, {
split => sub {
my @x = split /,/, $str;
my ($path, $value);
$value = pop @x if @x>1;
$path = join ',', @x;
#die unless $path eq $exp_path && $value eq $exp_value;
},
regex => sub {
my ($path, $value) =
$str=~/^ (?| ([^,]*) | (.*) , ([^,]*) ) $/x;
#die unless $path eq $exp_path && $value eq $exp_value;
},
} );
__END__
Rate split regex
split 326127/s -- -66%
regex 966896/s 196% --
Update: This version using rindex beats both split and the regex. |