Because that function is trivial to write and it isn't the only or even the obviously right choice.
sub first_or_all { wantarray ? @_ : $_[0] }
sub last_or_all { wantarray ? @_ : $_[-1] }
sub list_or_aref { wantarray ? @_ : \@_ }
sub aref_or_list { wantarray ? @{$_[0]} : $_[0] }
sub pairs_or_href { wantarray ? @_ : {@_} }
sub href_or_pairs { wantarray ? %{$_[0]} : $_[0] }
sub all_or_concat { wantarray ? @_ : join $,, @_ }
sub all_or_die {
return @_
if wantarray;
return $_[0]
if @_ <= 1;
require Carp;
local $Carp::level = 2;
my $sub = ( caller(1) )[3];
Carp::croak(
"Don't call $sub() like that in a scalar context" );
}
(to list just a few off the top of my head that I've heard people argue are wise choices)