summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/re/re.pm16
-rw-r--r--ext/re/t/reflags.t10
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\"";
}