E:\Perl\site\lib\My>type Filter.pm
#! perl -slw
package My::Filter;
use Filter::Simple;
use Benchmark::Timer;
our $t = Benchmark::Timer->new();
FILTER_ONLY
regex => sub {
$_ = "(?{{ \$My::Filter::t->start('$_$/') }})"
. "(?:$_)"
. "(?{{ \$My::Filter::t->stop('$_$/') }})";
},
;
sub report{ return $t->report() }
return 1 if caller();
use strict;
use My::Filter;
my $stuff = 'abcdefghijklmnopqrstuvwxyz';
for (1..1000) {
if ( $stuff =~ m[pqr] ) {
$stuff =~ s/(\G(?:.{3})+?)(?<=...)(.)(.)/$1$3$2/g;
}
$_ = $stuff;
my $OK = 1 if m[pqr];
}
print $stuff;
print '=' x 20, 'Timing of regexs in ', $0, '=' x 20;
print My::Filter::report();
####
E:\Perl\site\lib\My>perl Filter.pm
Subroutine report redefined at E:/Perl/site/lib/My/Filter.pm line 16.
abcdefghijklmnopqrstuvwxyz
====================Timing of regexs in Filter.pm====================
2000 trials of pqr
(260.000ms total), 130us/trial
5000 trials of (\G(?:.{3})+?)(?<=...)(.)(.)
(640.000ms total), 128us/trial
##
##
C:\test>perl -MMy::Filter -e"$s='abc'; print 'ok' if $s =~ m[b]; print My::Filter::report();"
ok1 trial of b
(0s total)
C:\test>