This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
PATCH: [perl #113750] re.pm clobbers $_
authorKarl Williamson <public@khwilliamson.com>
Wed, 20 Jun 2012 19:13:02 +0000 (13:13 -0600)
committerKarl Williamson <public@khwilliamson.com>
Wed, 20 Jun 2012 19:30:45 +0000 (13:30 -0600)
Thanks to Jesse Luehrs and Father Chrysostomos for testing advice.

ext/re/re.pm
ext/re/t/re.t
pod/perldelta.pod

index 75452b8..1242595 100644 (file)
@@ -4,7 +4,7 @@ package re;
 use strict;
 use warnings;
 
-our $VERSION     = "0.20";
+our $VERSION     = "0.21";
 our @ISA         = qw(Exporter);
 our @EXPORT_OK   = ('regmust',
                     qw(is_regexp regexp_pattern
@@ -142,7 +142,7 @@ sub bits {
            my $reflags = $^H{reflags} || 0;
            my $seen_charset;
            while ($s =~ m/( . )/gx) {
-                $_ = $1;
+                local $_ = $1;
                if (/[adul]/) {
                     # The 'a' may be repeated; hide this from the rest of the
                     # code by counting and getting rid of all of them, then
index 5fbf3fd..13498bb 100644 (file)
@@ -10,7 +10,7 @@ BEGIN {
 
 use strict;
 
-use Test::More tests => 14;
+use Test::More tests => 15;
 require_ok( 're' );
 
 # setcolor
@@ -63,6 +63,11 @@ my $ok='foo'=~/$reg/;
 eval"no re Debug=>'ALL'";
 ok( $ok, 'No segv!' );
 
+my $message = "Don't tread on me";
+$_ = $message;
+re->import("/aa");
+is($_, $message, "re doesn't clobber \$_");
+
 package Term::Cap;
 
 sub Tgetent {
index a64f963..efc101b 100644 (file)
@@ -324,7 +324,8 @@ L</Modules and Pragmata>.
 
 =item *
 
-XXX
+A regression introduced in v5.14.0 has been fixed, in which some calls
+to the C<re> module would clobber C<$_>.
 
 =back