On 18 juin, 18:31, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth Klaus <klau...@gmail.com>:
> > sub negated {
> > * * my ($caret, $class) = $_[0] =~ m{\A \(\? [\w\-]* : \[ (\^?)(.*?)
> > \]\) \z}xms
>
> In 5.14 the stringification syntax for qrs has changed. It now looks
> like
>
> * * (?^umsx:[abc123])
>
> This was done to allow for future extensions to the set of /x flags. You
> can either adjust your code to take account of this, or, better, use the
> regexp_pattern function exported by the re module:
>
> * * use re qw/regexp_pattern/;
>
> * * my ($pattern, $flags) = regexp_pattern $_[0];
> * * my ($caret, $class) = $pattern =~ /\A \[ (\^?) (.*?) \] \z/xms
> * * * * or die ...;
Thank you very much for this information, I wasn't aware that the
stringification syntax differs between different versions perl.
I will use re qw/regexp_pattern/ as follows:
==============
use 5.012;
use warnings;
use re qw/regexp_pattern/;
my $regexp1_orig = qr{[abc123]}xms;
my $regexp2_orig = qr{[^def456]}xms;
say "regexp1_orig = $regexp1_orig";
say "regexp2_orig = $regexp2_orig";
my $regexp1_negated = negated($regexp1_orig);
my $regexp2_negated = negated($regexp2_orig);
say "regexp1_negated = $regexp1_negated";
say "regexp2_negated = $regexp2_negated";
sub negated {
my ($pattern, $flags) = regexp_pattern($_[0]);
my ($caret, $class) =
$pattern =~ m{\A \[ (\^?) (.*?) \] \z}xms
or die "Can't parse regexp: $_[0]";
my $neg_caret = $caret eq '^' ? '' : '^';
my $neg_regexp = qr{[$neg_caret$class]}xms;
return $neg_regexp;
}
==============
|