#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;
use constant {
PATH => 0,
VERSION => 1,
WANT => 2,
};
use Benchmark 'cmpthese';
use Test::More;
my @tests = (
[qw{
/a/b/version1/c/d
version1
/a/b/version1
}],
[qw{
/some/path/3.5.2+tcl-tk-8.5.18+sqlite-3.10.0/a/b/c
3.5.2+tcl-tk-8.5.18+sqlite-3.10.0
/some/path/3.5.2+tcl-tk-8.5.18+sqlite-3.10.0
}],
);
plan tests => 2*@tests;
for my $test (@tests) {
is _regex(@$test[PATH, VERSION]), $test->[WANT];
is _rindex(@$test[PATH, VERSION]), $test->[WANT];
}
cmpthese 0 => {
regex0 => sub { _regex(@{$tests[0]}[PATH, VERSION]); },
regex1 => sub { _regex(@{$tests[1]}[PATH, VERSION]); },
rindex0 => sub { _rindex(@{$tests[0]}[PATH, VERSION]); },
rindex1 => sub { _rindex(@{$tests[1]}[PATH, VERSION]); },
};
sub _regex {
my ($path, $version) = @_;
$path =~ s/.*\Q$version\E\K.*//s;
return $path;
}
sub _rindex {
my ($path, $version) = @_;
$path = substr $path, 0, length($version) + rindex $path, $version;
return $path;
}
####
1..4
ok 1
ok 2
ok 3
ok 4
##
##
Rate regex1 regex0 rindex0 rindex1
regex1 809214/s -- -7% -69% -75%
regex0 866627/s 7% -- -67% -73%
rindex0 2632175/s 225% 204% -- -19%
rindex1 3257343/s 303% 276% 24% --
Rate regex1 regex0 rindex0 rindex1
regex1 825777/s -- -5% -68% -75%
regex0 870952/s 5% -- -66% -73%
rindex0 2579956/s 212% 196% -- -21%
rindex1 3261289/s 295% 274% 26% --
Rate regex1 regex0 rindex0 rindex1
regex1 807841/s -- -8% -69% -75%
regex0 880657/s 9% -- -66% -73%
rindex0 2625422/s 225% 198% -- -20%
rindex1 3265104/s 304% 271% 24% --
Rate regex1 regex0 rindex0 rindex1
regex1 807626/s -- -7% -69% -75%
regex0 873101/s 8% -- -66% -73%
rindex0 2567429/s 218% 194% -- -21%
rindex1 3255180/s 303% 273% 27% --
Rate regex1 regex0 rindex0 rindex1
regex1 827447/s -- -6% -68% -75%
regex0 877972/s 6% -- -66% -73%
rindex0 2579110/s 212% 194% -- -21%
rindex1 3260240/s 294% 271% 26% --