This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Emit warning for use re "/ul"
authorFather Chrysostomos <sprout@cpan.org>
Sat, 4 Dec 2010 20:38:38 +0000 (12:38 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 4 Dec 2010 20:38:38 +0000 (12:38 -0800)
This was an omission on my part.

This should perhaps be an error, but I am just following what
‘use re’ already does with ‘use re "whatever"’.

ext/re/re.pm
ext/re/t/reflags.t

index 1ca2ae5..b39199d 100644 (file)
@@ -142,10 +142,19 @@ sub bits {
            re->export_to_level(2, 're', $s);
        } elsif ($s =~ s/^\///) {
            my $reflags = $^H{reflags} || 0;
+           my $seen_dul;
            for(split//, $s) {
                if (/[dul]/) {
                    if ($on) {
+                       if ($seen_dul && $seen_dul ne $_) {
+                           require Carp;
+                           Carp::carp(
+                             qq 'The "$seen_dul" and "$_" flags '
+                            .qq 'are exclusive'
+                           );
+                       }
                        $^H{reflags_dul} = $reflags{$_};
+                       $seen_dul = $_;
                    }
                    else {
                        delete $^H{reflags_dul}
index 26e8f05..ef16e24 100644 (file)
@@ -10,7 +10,7 @@ BEGIN {
 
 use strict;
 
-use Test::More tests => 32;
+use Test::More tests => 38;
 
 use re '/i';
 ok "Foo" =~ /foo/, 'use re "/i"';
@@ -114,3 +114,25 @@ ok "A\n\n" =~ / a.$/sm, 'use re "/xi" in combination with explicit /sm';
   use re '/d';
   is eval 'qr//u', '(?^u:)', 'explicit /u in re "/d" scope';
 }
+no re '/x';
+
+# use re "/dul" combinations
+{
+  my $w = '';
+  local $SIG{__WARN__} = sub { $w = shift };
+  eval "use re '/dd'";
+  is $w, "", 'no warning with eval "use re "/dd"';
+  eval "use re '/uu'";
+  is $w, "", 'no warning with eval "use re "/uu"';
+  eval "use re '/ll'";
+  is $w, "", 'no warning with eval "use re "/ll"';
+  eval "use re '/dl'";
+  like $w, qr/The "d" and "l" flags are exclusive/,
+    'warning with eval "use re "/dl"';
+  eval "use re '/du'";
+  like $w, qr/The "d" and "u" flags are exclusive/,
+   'warning with eval "use re "/du"';
+  eval "use re '/ul'";
+  like $w, qr/The "u" and "l" flags are exclusive/,
+   'warning with use re "/ul"';
+}