Moose & isa ArrayRef

I'm trying to use Moose with Moose :: Meta :: Attribute :: Native :: Trait :: Array, but it looks like the ArrayRef helper is not working for me. Bellow is my code that returns

Can't call method "add_item" on unblessed reference at bug.pl line 42.

I am using Moose 2.0007 and Perl v5.10.1. Moose :: Autobox is installed. I would appreciate any suggestion.

#! / usr / bin / perl

use strict;

package CycleSplit;
use Moose;
has 'name' => (isa => 'Str', is => 'rw');
has 'start' => (isa => 'Num', is => 'rw');
has 'length' => (isa => 'Num', is => 'rw');
1;

package Cycle;
use Moose;
my @ empty = ();
has 'name' => (isa => 'Str', is => 'rw');
has 'splits' => (
    traits => ['Array'],
    isa => 'ArrayRef [CycleSplit]',
    is => 'rw',
    default => sub {[]},
    handles => {
        add_item => 'push',
    },
);


no Moose;
1;

package Main;

sub Main {
    my $ cyc = Cycle-> new ();
    $ cyc-> name ("Days of week");

    for my $ i (1..7) {
        my $ spl = CycleSplit-> new ();
        $ spl-> name ("Day $ i");
        $ spl-> start ($ i / 7- (1/7));
        $ spl-> length (1/7);
        $ cyc-> splits-> add_item ($ spl);
    }

    my $ text = '';
    foreach my $ spl ($ cyc-> splits) {
        $ text. = $ spl-> name. "";
    }

    print $ text;
}

Main;

+3
source share
1 answer

handles , . , splits - arrayref, foreach. :

sub Main {
    my $cyc=Cycle->new();
    $cyc->name("Days of week");

    for my $i (1..7) {
        my $spl=CycleSplit->new();
        $spl->name("Day $i");
        $spl->start($i/7-(1/7));
        $spl->length(1/7);
        $cyc->add_item($spl);               # removed splits
    }

    my $text='';
    foreach my $spl (@{ $cyc->splits }) {   # added array dereference
        $text.=$spl->name." ";
    }

    print $text;
}
+11

All Articles