+0.11 2015-11-05 01:00 UTC - Vincent Pit
+ + Add : It is now possible to specify a re::engine::Plugin object
+ destructor by passing the 'free' option either to
+ re::engine::Plugin->import or to $re->callbacks.
+ + Chg : A large chunk of boilerplate XS code, which is also used in
+ other XS modules, has been factored out of the main .xs file
+ to a collection of .h files in the xsh subdirectory.
+ + Fix : A couple of memory leaks have been plugged.
+
0.10 2014-10-01 23:55 UTC - Vincent Pit
+ Fix : [RT #92118] : Testing failed with Perl 5.17.5+
The tests have been taught about perls newer than 5.18.0.
{
"abstract" : "API to write custom regex engines",
"author" : [
+ "Ævar Arnfjörð Bjarmason <avar@cpan.org>",
"Vincent Pit <perl@profvince.com>"
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.142690",
+ "generated_by" : "ExtUtils::MakeMaker version 7.1, CPAN::Meta::Converter version 2.150005",
"license" : [
"perl_5"
],
"url" : "http://git.profvince.com/?p=perl%2Fmodules%2Fre-engine-Plugin.git"
}
},
- "version" : "0.10"
+ "version" : "0.11",
+ "x_serialization_backend" : "JSON::PP version 2.27300"
}
---
abstract: 'API to write custom regex engines'
author:
+ - 'Ævar Arnfjörð Bjarmason <avar@cpan.org>'
- 'Vincent Pit <perl@profvince.com>'
build_requires:
ExtUtils::MakeMaker: '0'
configure_requires:
ExtUtils::MakeMaker: '0'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.142690'
+generated_by: 'ExtUtils::MakeMaker version 7.1, CPAN::Meta::Converter version 2.150005'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
homepage: http://search.cpan.org/dist/re-engine-Plugin/
license: http://dev.perl.org/licenses/
repository: http://git.profvince.com/?p=perl%2Fmodules%2Fre-engine-Plugin.git
-version: '0.10'
+version: '0.11'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.016'
re::engine::Plugin - API to write custom regex engines
VERSION
- Version 0.10
+ Version 0.11
DESCRIPTION
As of perl 5.9.5 it's possible to lexically replace perl's built-in
use re::engine::Plugin (
comp => sub {},
exec => sub {},
+ free => sub {},
);
To write a custom engine which imports your functions into the caller's
re::engine::Plugin->import(
comp => \&comp,
exec => \&exec,
+ free => \&free,
);
}
# Implementation of the engine
sub comp { ... }
sub exec { ... }
+ sub free { ... }
1;
comp => sub {
my $rx = shift;
croak "Your pattern is invalid"
- unless $rx->pattern ~~ /pony/;
+ unless $rx->pattern =~ /pony/;
}
);
pattern such as "/(/".
exec
- exec => sub {
- my ($rx, $str) = @_;
+ my $ponies;
+ use re::engine::Plugin(
+ exec => sub {
+ my ($rx, $str) = @_;
- # We always like ponies!
- return 1 if $str ~~ /pony/;
+ # We always like ponies!
+ if ($str =~ /pony/) {
+ $ponies++;
+ return 1;
+ }
- # Failed to match
- return;
- }
+ # Failed to match
+ return;
+ }
+ );
Called when a regex is being executed, i.e. when it's being matched
against something. The scalar being matched against the pattern is
This callback can also be specified on an individual basis with the
"callbacks" method.
+ free
+ use re::engine::Plugin(
+ free => sub {
+ my ($rx) = @_;
+
+ say 'matched ' ($ponies // 'no')
+ . ' pon' . ($ponies > 1 ? 'ies' : 'y');
+
+ return;
+ }
+ );
+
+ Called when the regexp structure is freed by the perl interpreter. Note
+ that this happens pretty late in the destruction process, but still
+ before global destruction kicks in. The only argument this callback
+ receives is the "re::engine::Plugin" object associated with the regexp,
+ and its return value is ignored.
+
+ This callback can also be specified on an individual basis with the
+ "callbacks" method.
+
METHODS
str
- "str" ~~ /pattern/;
+ "str" =~ /pattern/;
# in comp/exec/methods:
my $str = $rx->str;
mod
my %mod = $rx->mod;
- say "has /ix" if %mod ~~ 'i' and %mod ~~ 'x';
+ say "has /ix" if %mod =~ 'i' and %mod =~ 'x';
A key-value pair list of the modifiers the pattern was compiled with.
The keys will zero or more of "imsxp" and the values will be true values
given as the key by the code reference passed as the corresponding
value.
- The only valid key is currently "exec". See "exec" for more details
- about this callback.
+ The only valid keys are currently "exec" and "free". See "exec" and
+ "free" for more details about these callbacks.
num_captures
$re->num_captures(
my ($re, $paren) = @_;
# This is perl's engine doing the match
- $str ~~ /(.*)/;
+ $str =~ /(.*)/;
# $1 has been untainted
return $1;
LICENSE
Copyright 2007,2008 Ævar Arnfjörð Bjarmason.
- Copyright 2009,2010,2011,2013,2014 Vincent Pit.
+ Copyright 2009,2010,2011,2013,2014,2015 Vincent Pit.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.