Hi Monks,
I am struggling to understand how I can assign to an ArrayRef accessor. I am trying to use Moo and Types::Standard for my class attributes. My efforts always produce a extra ArrayRef that is one level deeper than I need.
As far as I can tell, you have to assign a reference to the attribute once it's marked as a 'Ref' but in doing so I end up with an array reference inside an array reference. Perhaps I want a list type but I don't see one.

Code

#!perl use v5.22; use warnings; use Test::Deep; use Test::More; BEGIN { package MockObj; use Moo; use Types::Standard qw(ArrayRef Str); use namespace::autoclean; has 'files' => ( # `rpw` would be better as, in practice, # this is only used inside the class is => 'rw', isa => ArrayRef[Str], ); 1; }; my $mock = MockObj->new; my @list = ('string one', 'Different string', 'With feeling'); note explain \@list; $mock->files( \@list ); my @strings = $mock->files; note explain \@strings; cmp_deeply(\@strings, bag(@list)); done_testing;

Result

# [ # 'string one', # 'Different string', # 'With feeling' # ] # [ # [ # 'string one', # 'Different string', # 'With feeling' # ] # ] not ok 1 # Failed test at t/test-case.t line 31. # Comparing $data as a Bag # Missing: 'Different string', 'With feeling', 'string one' # Extra: 1 reference
Your enlighenment is much appreciated,

In reply to Assigning to a ArrayRef accessor type by tomred

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.