use warnings; use strict; my @objs; push @objs, bless {me => "Object $_"} for 1 .. 3; my $obj = bless {objs => \@objs}; $obj->doStuff (); sub doStuff { my $self = shift; $_->doSomethingElse() for @{$self->{objs}}; } sub doSomethingElse { my $self = shift; print "Visited $self->{me}\n"; } #### Visited Object 1 Visited Object 2 Visited Object 3