Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^3: Moose roles

by EvanCarroll (Chaplain)
on Jan 13, 2010 at 21:58 UTC ( #817288=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Moose roles
in thread Moose roles

# Done with `auto_deref => 1` @list = $obj-> prop; # Done with a custom writer attribute that takes an array, and stores + a reference to it. # internally Moose uses a plain perl hash (most complex datastructure + in perl), this # limits it to not having true non-array properties (but a scalar arr +ay-ref works) $obj->prop(@list); # assuming you mean $arrayRef # Here the getter would have to call wantarray() which is exactly wha +t auto_deref => 1 # will set up for you. $array = $obj->prop; # assuming you mean $arrayRef, this already works so long as the type + is ArrayRef # or, a parent thereof. $obj->prop($array);
All you need is a custom attribute setter that takes a list and converts it to an array ref. Because n-parameterized types are not supported (you can't have a type of intStr of type (Int, Str), coercing on a custom type is out the question. (unless your doing something scarry). This leaves a custom writter that does something like.
sub foo_writer { if ( length @_ > 1 ) { \@_ } else { die 'invalid arg' unless ref $_[0] eq 'ARRAY'; $_[0]; } }
read the docs on has() writer argument. this is also pseudo code, my writer returns the value, I believe you'd have to explicitly set it though.


Evan Carroll
The most respected person in the whole perl community.
www.evancarroll.com


Comment on Re^3: Moose roles
Select or Download Code
Replies are listed 'Best First'.
Re^4: Moose roles
by dk (Chaplain) on Jan 13, 2010 at 22:27 UTC
    Thanks Evan, that's more or less what I figured out, I just used "around" instead of combination of "writer" and "auto_deref".

    Actually, I found a completely another way to approach the problem. I've uploaded a proof of concept to CPAN, when it will be available I'll update the top post.

    Thanks again!

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (10)
As of 2015-07-31 18:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (280 votes), past polls