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" ); }