#!perl -l my $code = sub { wantarray ? 1 : 0 }; sub wrapper { # ... later return wantarray ? &$code : scalar &$code; } print wrapper; # 1 print scalar wrapper; # 0 #### #!perl -l my $code = sub { wantarray ? 1 : 0 }; sub wrapper { my @r = wantarray ? &$code : scalar &$code; # ... later # Convert the array to a list to alter the # behaviour when assigning to a scalar. return @r[0..$#r]; } print wrapper; # 1 print scalar wrapper; # 0 #### @r = &{ sub { return (4, 5, 6); } }; # 4, 5, 6 @r = &{ sub { my @r = (4, 5, 6); return @r; } }; # 4, 5, 6 @r = &{ sub { my @r = (4, 5, 6); return @r[0..$#r]; } }; # 4, 5, 6 $r = &{ sub { return (4, 5, 6); } }; # 6 $r = &{ sub { my @r = (4, 5, 6); return @r; } }; # 3 $r = &{ sub { my @r = (4, 5, 6); return @r[0..$#r]; } }; # 6 #### #!perl -l my $code = sub { wantarray ? 1 : 0 }; sub wrapper { # ... later goto &$code; } print wrapper; # 1 print scalar wrapper; # 0