in reply to Scoping of my with foreach loop

Yes. In the second, $item is scoped only to the loop. In the first, $item is scoped outside the loop. You would use the second first if you want to access the value of $item outside the loop. As in
my $item; foreach $item (@values) { last if $item =~ /Some Complicated Regex/; } do_something_with( $item );

Update: Fixed typo as per Fletch's /msg.

Being right, does not endow the right to be rude; politeness costs nothing.
Being unknowing, is not the same as being stupid.
Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence.
Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.

Replies are listed 'Best First'.
Re^2: Scoping of my with foreach loop
by ikegami (Patriarch) on Mar 07, 2005 at 19:33 UTC

    Not quite.

    do_something_with( $item );
    will always be the same as
    do_something_with( undef );
    in your code. foreach restores the initial value when the loops exits (in effect), as seen in the following snippet:

    use strict; my @values = (1, 2, 3, 'a', 4); my $item = 'z'; foreach $item (@values) { last if $item =~ /[^\d]/; } print($item); # Prints 'z', not 'a'.

    I thought it might be using a localized global when my is omitted, but it's clearly not the case:

    This is perl, v5.6.1 built for MSWin32-x86-multi-thread