sub abc() { $_ = 'x'; } sub xyz() { foreach(4..5) { print " Before:$_\n"; print " After:$_\n"; } } foreach(1..2) { print "Before:$_\n"; xyz(); print "Mid:$_\n"; abc(); print "After:$_\n"; }
The above code produces
Before:1 Before:4 After:4 Before:5 After:5 Mid:1 After:x Before:2 Before:4 After:4 Before:5 After:5 Mid:2 After:x
I have a simple loop which contains a call that assigns a value to $_. The sub actually does this with
while (<IN>){}This would indicate that $_ should be viewed as a global variable as used in abc(). However, in the xyz() sub $_ appears to be non-global as it leaves the $_ in the caller alone. What is the scope of $_ supposed to be?
In reply to What is the scope of $_? by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |