in reply to Re^5: How can I avoid code repetition here
in thread How can I avoid code repetition here

Honestly I had not expected that this would ever become valid, and I'm still puzzled how this can work, i.e. how a builtin function (like chop) can modify *any* localized variable by name...

-- 
Ronald Fischer <ynnor@mm.st>

Replies are listed 'Best First'.
Re^7: How can I avoid code repetition here
by JavaFan (Canon) on Oct 08, 2009 at 15:07 UTC
    All what's happening is an implicite passing of $_. But passing $_ isn't any different from passing $str. And you do believe that my $str = "..."; chop $str modifies the lexical (I guess you meant lexical variable where you write localized variable) variable, don't you?
      you do believe that my $str = "..."; chop $str modifies the lexical

      Yes, with *explicit* passing of a lexical, it is easy to understand how it is done; and if the compiler "knows" about chop (as a 'builtin' function), I can understand now how this work for this case. I wonder whether it would also be possible to write a user defined sub which, when called without parameters, acts on $_ even if it was lexically declared. I don't see how this can be done...

      -- 
      Ronald Fischer <ynnor@mm.st>
        sub hello (_) {say "Hello, ", @_ ? $_[0] : $_} hello "world"; my $_ = "mars"; hello; { my $_ = "earth"; hello; } hello; __END__ Hello, world Hello, mars Hello, earth Hello, mars
        What do you mean?
        $_ = 1; my $_ = 6; sub ford { $_ .= 6; }; warn $_; warn ford(); warn $_; warn $::_; __END__ 6 at - line 4. 66 at - line 5. 66 at - line 6. 1 at - line 7.