http://www.perlmonks.org?node_id=741690


in reply to Re: 'use subs' causes method to vanish
in thread 'use subs' causes method to vanish

You're right, I don't need (and from this result won't be using) use subs for an object method. I only encountered this because I used a script to use subs for all subs, to be able to begin to get rid of parentheses for non-object subs.

I can sort out the methods from the subs and solve the problem, and I'd like to understand perl internals better, too. Hence this posting.

Replies are listed 'Best First'.
Re^3: 'use subs' causes method to vanish
by chromatic (Archbishop) on Feb 05, 2009 at 22:51 UTC
    I only encountered this because I used a script to use subs for all subs, to be able to begin to get rid of parentheses for non-object subs.

    As you've seen, that's a bad idea. If you're rigorous about the order in which Perl compiles your code, you can get away with it... but I like to avoid code which relies on a well-defined order of appearance in the compilation process, as it seems fragile.

      Hi chromatic,

      I'm honored. I agree that it's not a good idea to code using fragile features. In this case, I can't get my updated test case to break whereever I place my 'use subs' statement. I'm curious, because I expect use subs to be part of the extremely beaten-on core of the core of perl. I'm also curious, because I've found such suprising behavior in my bugs that I wondered if it might be worth exploring them more, rather than just fixing or working around them and moving on.

        The subs pragma is fine. The fragile part of the code is the use of barewords.

        You don't see any trouble in your single file because it's a single file. When you start exporting subs and pulling in classes and packages from other files, then life can get complicated. There are some seven to ten cases of bareword disambiguation in the Perl 5 lexer, and almost no one can enumerate all of them; the complexity of those heuristics and the fact that even experts have trouble remembering all of the ways things that go weird make me want to avoid them where possible.