sub ret_list {
return $_[0..$#_];
}
####
sub ret_slice {
return @_[0..$#_];
}
##
##
# the data
our @zot = qw(apples Ford perl Jennifer);
# the output
print "Func Context RetVal \n",
"---- ------- ------ \n";
{ # our function
my @list = &ret_std( @zot );
my $scalar = &ret_std( @zot );
print "Std LIST @{list} \n", # prints 'apples Ford perl'
"Std SCALAR ${scalar} \n\n"; # prints 3
}
{ # a poorly-written function
my @list = &ret_bad( @zot );
my $scalar = &ret_bad( @zot );
print "Bad LIST @{list} \n", # prints 'apples Ford perl'
"Bad SCALAR ${scalar} \n\n"; # prints 'perl'
}
{ # a better function
my @list = &ret_good( @zot );
my $scalar = &ret_good( @zot );
print "Good LIST @{list} \n", # prints 'apples Ford perl'
"Good SCALAR ${scalar} \n\n"; # prints 'apples Ford perl'
}
# the functions
# returns full list, or number of elements
sub ret_std {
my @foo = @_[0..2];
return @foo;
}
# returns a list each time, but how long, and which parts??
sub ret_bad {
return @_[0..2];
}
# the "proper" function (from perldoc -f wantarray)
# returns the full list, as a space-delimited scalar or list
sub ret_good {
my @bar = @_[0..2];
return (wantarray()) ? @bar : "@bar";
}