my $foo = some_func(); my ($foo) = some_func(); # may or may not behave the same! #### sub some_func { # do stuff return wantarray ? @results : \@results; # is void context OK? } #### sub some_func { # do stuff return wantarray ? @results : defined wantarray ? \@results : warn "Useless void context"; } #### sub some_func { # do stuff if (wantarray) { return @results; elsif (defined wantarray) { return \@results; else { warn "this is tedious"; } } #### use Attribute::Context; sub some_func : Arrayref(WARNVOID) { # do stuff return @results; } #### sub some_func : Custom(Some::Class) { # do stuff return @results; } # scalar context returns Some::Class->new(\@results)