Bompa wrote:
"I wrote a script to demonstrate how the value of $_ could get changed
unexpectedly.  (It took me an hour, but I learned from it, heh).

use strict;
our @list = qw(a b c d);
foreach (@list) {
   &check_b;
   print $_, "\n";
}


sub check_b {
   foreach (@list) {
     #local $_;
     $_ =~ s/b/bb/;
     # SAVE TO FILE
   }
}

As is, @list is printed incorrectly, but if you uncomment #local $_;,
it'll print as expected."


Bompa, was this the actual code you used? what was your output? and what 
machine are you on?

1 #!/usr/bin/perl -w
       2 use strict;
       3 use diagnostics;
       4
       5 our @list = qw(a b c d);
       6 foreach (@list) {
       7   &check_b;
       8   print $_, "\n";
       9 }
      10
      11
      12 sub check_b {
      13   foreach (@list) {
      14     local $_;
      15     $_ =~ s/b/bb/;
      16     # SAVE TO FILE
      17   }
      18 }
~
with #13 uncommented it produces the following output:

Use of uninitialized value in substitution (s///) at ./ccdd line 15 (#1)

     (W uninitialized) An undefined value was used as if it were already 
defined.  It was
     interpreted as a "" or a 0, but maybe it was a mistake.  To suppress 
this
     warning assign a defined value to your variables.

a
b
c
d


with 'use diagnostics' removed it produces:

Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
a
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
b
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
c
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
Use of uninitialized value in substitution (s///) at ./ccdd line 14.
d


I am running perl 5.6 on macos x.1. Sorry dude, i'm not trying to be a 
dick or anything, just asking ;-)

Reply via email to