[Chicago-talk] Sharing my pain

Andy_Bach at wiwb.uscourts.gov Andy_Bach at wiwb.uscourts.gov
Fri Oct 13 13:44:29 PDT 2006


One thing - this syntax:
     my $sp;
     foreach $sp (@tmp) {

is subtly wrong - got this from Damian Conway at YAPC but - even 
strict/warnings won't help you; the $sp inside the foreach is *not* the 
'my'-ed $sp from the line before.  It gets silently localized w/i the 
loop:
use strict;
use warnings;
my @tmp = qw(1 2 3);
my $sp = 'hi';
foreach $sp (@tmp) {
       print "sp: $sp\n";
}
print "sp: $sp\n";

gets:
sp: 1
sp: 2
sp: 3
sp: hi

Some folks try to use it to hold the last index value in a for loop.  I 
guess P6 (and maybe 5.real soon now) fixes this bug.  But:
foreach my $sp (@tmp) {

is what you want, or an explicit 'save' if you want to see the last value:
my $save_sp;
foreach my $sp (@tmp) {
    $save_sp = $sp
   ....
 }
print "Last sp value: $save_sp\n";

a

Andy Bach, Sys. Mangler
Internet: andy_bach at wiwb.uscourts.gov 
VOICE: (608) 261-5738  FAX 264-5932

"The whole point of reserving these namespaces is not to prevent users 
from 
misusing them, but to ensure that when we eventually get around to using a 

particular block name, and those same users start screaming about it, we 
can 
mournfully point to the passage in the original spec and silently shake 
our 
heads. ;-)"

Damian Conway, P6 list


More information about the Chicago-talk mailing list