#!/usr/bin/perl use strict; use warnings; package Child; use Moose; has 'name' => (is => 'rw'); package Father; use Moose; has 'name' => (is => 'rw'); has 'children' => (is => 'rw', isa => 'ArrayRef'); use overload '+' => \&add, '""' => \&to_s; sub add { my $self = shift; push @{$self->{children}}, shift @_; } sub to_s { my $self = shift; my $sons = ''; $sons .= $_->name . ", " for @{$self->children}; $sons =~ s/\,\s(\w+)\,\s?$/ and $1/; return $self->name . " and his sons: " . $sons; } package main; no warnings; my $son = Child->new(name => 'Jackson'); my $son2 = Child->new(name => 'Jim'); my $dad = Father->new(name => 'Jack'); $dad + $son; $dad + $son2; print $dad;