Do you know where your variables are? | |
PerlMonks |
comment on |
( [id://3333]=superdoc: print w/replies, xml ) | Need Help?? |
Hi fireblood, ... the inner "for" would replace that list with a list of its own This is the bit of logic that choroba already pointed out is the mistake: the outer for sets a local $_ to each of the lines of input, while the inner for sets a local $_ to each return value of the split (which is only called once on each iteration of the outer loop, and it splits the outer loop's $_, i.e. the line). See Foreach Loops (emphasis mine): The foreach loop iterates over a normal list value and sets the scalar variable VAR to be each element of the list in turn. If the variable is preceded with the keyword my, then it is lexically scoped, and is therefore visible only within the loop. Otherwise, the variable is implicitly local to the loop and regains its former value upon exiting the loop. If the variable was previously declared with my, it uses that variable instead of the global one, but it's still localized to the loop. This implicit localization occurs only in a foreach loop. ... If VAR is omitted, $_ is set to each value. I acutally wanted to pick up on something else: Before I start relying on this behavior in production programs I would be very careful with nested loops setting multiple versions of $_ in production programs. It's incredibly easy to introduce a bug by just moving a line around. My view on this is not as strict as some other peoples' that I have seen, who say to avoid $_ as much as possible and use named lexicals everywhere. I think that for short loops of maybe 1-3 lines of code, using $_ is usually fine. However, nested loops usually exceed that limit and so in the example you've posted, I'd recommend you use named lexicals in both your loops. Hope this helps, In reply to Re: Default variable $_ is not getting overwritten
by haukex
|
|