diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/re/re.pm | 16 | ||||
-rw-r--r-- | ext/re/t/reflags.t | 10 |
2 files changed, 22 insertions, 4 deletions
diff --git a/ext/re/re.pm b/ext/re/re.pm index 5904d4e00e..511c1c4b9a 100644 --- a/ext/re/re.pm +++ b/ext/re/re.pm @@ -109,6 +109,7 @@ sub _load_unload { sub bits { my $on = shift; my $bits = 0; + my %seen; # Has flag already been seen? ARG: foreach my $idx (0..$#_){ my $s=$_[$idx]; @@ -187,7 +188,8 @@ sub bits { && $^H{reflags_charset} == $reflags{$_}; } } elsif (exists $reflags{$_}) { - $on + $seen{$_}++; + $on ? $reflags |= $reflags{$_} : ($reflags &= ~$reflags{$_}); } else { @@ -208,6 +210,18 @@ sub bits { ")"); } } + if (exists $seen{'x'} && $seen{'x'} > 1 + && (warnings::enabled("deprecated") + || warnings::enabled("regexp"))) + { + my $message = "Having more than one /x regexp modifier is deprecated"; + if (warnings::enabled("deprecated")) { + warnings::warn("deprecated", $message); + } + else { + warnings::warn("regexp", $message); + } + } $bits; } diff --git a/ext/re/t/reflags.t b/ext/re/t/reflags.t index b2cbf80d38..e90a712740 100644 --- a/ext/re/t/reflags.t +++ b/ext/re/t/reflags.t @@ -10,7 +10,7 @@ BEGIN { use strict; -use Test::More tests => 62; +use Test::More tests => 63; my @flags = qw( a d l u ); @@ -165,9 +165,13 @@ is qr//, '(?^:)', 'no re "/aai"'; } $w = ""; - eval "use re '/axaa'"; + eval "use re '/amaa'"; like $w, qr/The "a" flag may only appear a maximum of twice/, - "warning with eval \"use re \"/axaa\""; + "warning with eval \"use re \"/amaa\""; + $w = ""; + eval "use re '/xamax'"; + like $w, qr/Having more than one \/x regexp modifier is deprecated/, + "warning with eval \"use re \"/xamax\""; } |