That's probably because you added a couple of lines to his script.  I know
it's probably a good idea to turn on all the warnings, but the script does
work without the -w switch and diagnostics in a way that demonstrates his
point.  

-----Original Message-----
From: david wright
To: [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Sent: 2/4/02 11:12 PM
Subject: Why localize $_, was-> Re: why shift @_ ?

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 ;-)


--------------------------------------------------------------------------------
This email may contain confidential and privileged 
material for the sole use of the intended recipient. 
If you are not the intended recipient, please contact 
the sender and delete all copies.

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to