in reply to Re^3: Problem with -d inside find sub
in thread Problem with -d inside find sub

Weird. I wonder why given/when blocks would handle hash lexicals differently than any other kind of block. Definitely seems like a perl bug.

Replies are listed 'Best First'.
Re^5: Problem with -d inside find sub
by Anonymous Monk on Apr 28, 2012 at 11:33 UTC
    The problem is with local and lexical $_
    Example:
    use 5.010; sub my_sub (&) { my $code = shift; local $_ = '1234'; $code->(); } my_sub { say }; given ("test") { when ("test") { my_sub { say }; } }
    Output:
    1234 test
    Why?
    Because my $_ (lexical - from the given/when blocks ($_ = 'test')) has a higher priority (aka is in the block where you are) than the local $_ (local - from the my_sub ($_ = '1234')

    How to fix this?
    use 5.010; sub my_sub (&) { my $code = shift; local $_ = '1234'; $code->(); } my_sub { say }; sub my_sub2 { my_sub { say }; } given ("test") { when ("test") { my_sub2(); } }