http://www.perlmonks.org?node_id=1067426


in reply to Perl OO with Class::Struct

Just for fun... And I'm more of a dog fan, too. :)
#!/usr/bin/perl use strict; use warnings; { package Dog; sub new { my ( $caller, $dog ) = @_; my $class = ref($caller) || $caller; my $dogs = { NAME => $dog, }; bless $dogs, $class; } sub name { my $self = shift; ( @_ ) ? $self->{NAME} = shift : return $self->{NAME}; } } { package Litter; sub new { my ( $caller, $list ) = @_; die "not an DOG ref" unless ref($list->[0]) eq "Dog"; my $class = ref($caller) || $caller; my $litter = { DOGS => $list, }; bless $litter, $class; } sub dogs { my $self = shift; ( @_ ) ? $self->{DOGS} = shift : return $self->{DOGS}; } } my $dog1 = Dog->new('Strider'); my $dog2 = Dog->new('Bella'); my $litter = Litter->new([$dog1, $dog2]); for ( @{$litter->dogs} ) { print $_->name . "\n" }