#!/usr/bin/env perl # Core Modules use strict; use warnings; use utf8; use 5.010; use open ':encoding(UTF-8)'; use open ':std'; use MooseX::Declare; class Person { has 'name' => ( is => 'ro', isa => 'Str' ); has 'private_phone_numbers' => ( traits => ['Array'], is => 'ro', isa => 'ArrayRef[Str]', default => sub { [] }, handles => { all_private_numbers => 'elements', add_private_number => 'push', count_private_numbers => 'count', get_private_number => 'get', }, ); } my $person = Person->new( name => 'David Raab' ); say "Numbers: ", $person->count_private_numbers; $person->add_private_number('0171123456'); say "Numbers: ", $person->count_private_numbers; $person->add_private_number('1234567890'); say "Numbers: ", $person->count_private_numbers; say for $person->all_private_numbers;