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

Two solutions:
1. Declare the %options outside of the given-when blocks.
2. say $File::Find::name;

Replies are listed 'Best First'.
Re^4: Problem with -d inside find sub
by randian (Acolyte) on Apr 27, 2012 at 14:18 UTC
    Weird. I wonder why given/when blocks would handle hash lexicals differently than any other kind of block. Definitely seems like a perl bug.
      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(); } }