# 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.