my @foo_subs = ( 'sub { return ( 4, 5, 6 ) }', 'sub { my @x = ( 4, 5, 6 ); return @x; }', 'sub { wantarray ? ( 7 ) : 8 }', ); foreach my $foo_str ( @foo_subs ) { my $foo = eval $foo_str; my ($x) = $foo->(); my $y = $foo->(); print "foo = $foo_str\n"; print "(\$x) = $x\n"; print " \$y = $y\n"; } __END__ foo = sub { return ( 4, 5, 6 ) } ($x) = 4 $y = 6 foo = sub { my @x = ( 4, 5, 6 ); return @x; } ($x) = 4 $y = 3 foo = sub { wantarray ? ( 7 ) : 8 } ($x) = 7 $y = 8