I am attempting to use code attributes with Moo, however it seems that Moo doesnt load base/role classes early enough? And they attributes always seem to be invalid as MODIFY_CODE_ATTRIBUTES doesnt seem to be loaded.
For example
package Something::Base; use Scalar::Util qw( refaddr ); use Moo::Role; # _ATTRIBUTES stuff doesnt seem to be inherited early e +nough with Moo? ## use strict; use warnings; { my %attrs; sub MODIFY_CODE_ATTRIBUTES { my ($package, $subref, @attrs) = @_; $attrs{ refaddr $subref } = \@attrs; return; } sub FETCH_CODE_ATTRIBUTES { my ($package, $subref) = @_; my $attrs = $attrs{ refaddr $subref } or return; return @$attrs; } } package Something::Else; use Moo; with 'Something::Base'; #use base 'Something::Base'; # this works! sub foo : Foo(bar) { return 1 }
The above code will always give me 'Invalid CODE attribute' unless i 'use base/parent'. Neither extends nor with (roles) works. Wrapping the 'use Moo; with "Something::Base"' also works.
The Lexical::Attribute i can't get to work at all with inheritance. Either moo or use base/parent
Thoughts?
In reply to Moo vs Code Attributes by djzort
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |