Proposed patch + test case.
Marcel GrĂ¼nauer [Tue, 22 Jun 2004 16:43:50 +0000 (16:43 +0000)]
Subject: [perl #30409] charnames.pm clobbers default variable
From: Marcel "GrĂ¼nauer" (via RT) <perlbug-followup@perl.org>
Message-ID: <rt-3.0.9-30409-91174.12.8617678524438@perl.org>

p4raw-id: //depot/perl@22972

lib/charnames.pm
lib/charnames.t

index 4f7fdeb..f0a4446 100644 (file)
@@ -190,8 +190,8 @@ sub import
   ## fill %h keys with our @_ args.
   ##
   my ($promote, %h, @args) = (0);
-  while (@_ and $_ = shift) {
-    if ($_ eq ":alias") {
+  while (my $arg = shift) {
+    if ($arg eq ":alias") {
       @_ or
        croak ":alias needs an argument in charnames";
       my $alias = shift;
@@ -210,11 +210,11 @@ sub import
       alias_file ($alias);
       next;
     }
-    if (m/^:/ and ! ($_ eq ":full" || $_ eq ":short")) {
-      warn "unsupported special '$_' in charnames";
+    if (substr($arg, 0, 1) eq ':' and ! ($arg eq ":full" || $arg eq ":short")) {
+      warn "unsupported special '$arg' in charnames";
       next;
     }
-    push @args, $_;
+    push @args, $arg;
   }
   @args == 0 && $promote and @args = (":full");
   @h{@args} = (1) x @args;
index 3502b74..49917c5 100644 (file)
@@ -15,7 +15,7 @@ require File::Spec;
 
 $| = 1;
 
-print "1..73\n";
+print "1..74\n";
 
 use charnames ':full';
 
@@ -328,6 +328,12 @@ for (@prgs) {
     1 while unlink $alifile;
     }
 
+# [perl #30409] charnames.pm clobbers default variable
+$_ = 'foobar';
+eval "use charnames ':full';";
+print "not " unless $_ eq 'foobar';
+print "ok 74\n";
+
 __END__
 # unsupported pragma
 use charnames ":scoobydoo";