package MapDelay; sub new { my ($class,@self) = @_; bless \@self, $class; }; sub AUTOLOAD { (my $m = $AUTOLOAD) =~ s/.*:://; my $self = shift; map { $_->$m(@_) } @$self }; package Foo; sub foo { return MapDelay->new( Bar->new, Bar->new, Bar->new ); };