Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^2: Moose - two augmented methods in one class

by zwon (Monsignor)
on Jan 09, 2012 at 15:25 UTC ( #947021=note: print w/ replies, xml ) Need Help??


in reply to Re: Moose - two augmented methods in one class
in thread Moose - two augmented methods in one class

Update: ignore this, tobyink is right, I didn't pay enough attention to the question

This cumbersome check is not really required. inner is no-op if there's no augment:

use 5.010; use strict; use warnings; { package C1; use Moose; sub test { return "<C1>".(inner()//'')."</C1>"; } } { package C2; use Moose; extends 'C1'; } my $c2 = C2->new; say $c2->test; __END__ <C1></C1>


Comment on Re^2: Moose - two augmented methods in one class
Select or Download Code
Re^3: Moose - two augmented methods in one class
by tobyink (Abbot) on Jan 09, 2012 at 15:37 UTC

    Actually, in the example, it does seem necessary, as it seems to hit onto a barely documented area of Moose behaviour bug according to several people in #moose in irc.perl.org. The html method defined in the superclass, calls head defined in the invocant. head isn't augmented in the subclass, so the head method defined in the superclass is used directly. This calls inner which searches up the callstack for an augmented method. While we'd want it to find head, that method is not augmented in the subclass, so it finds html instead, inadvertently using the wrong augmentation.

    Try the code from the original question and you'll see.

        I think the lesson to be learned here is simply "don't use augment/inner for anything complicated", which can be whittled down to "don't use augment/inner" if you like.

        Basically, it was an interesting feature, but not something I would advise leaning on too heavily. Not only is the implementation problematic, but the semantics are just plain weird (even in the BETA language from which I originally stole it).

        -stvn

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://947021]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (9)
As of 2014-12-18 07:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (44 votes), past polls