in reply to Should we handle multiple arguments as a list?

If you're asking how to write a function that can process either a scalar or a list of values (operating on each value in the list in turn) and the function returns EITHER a scalar OR a list see the Camel book for 'wantarray' function. Here's a quick example for you:

# Trim beginning and trailing whitespace only sub trim { my @out=@_; # reassign so we don't change input values for (@out) { # loop and substitution are using default system variable $_ s/^\s+//; s/\s+$//; } # the return uses Perl's only trinary operator # COND ? THEN : ELSE # Was this subroutine called in list context or not? return wantarray ? @out : $out[0]; } # main program my @list=(' List 1 ',' List 2 ',' List 3 '); my $val=' Scalar '; print "'$_'\n" foreach (trim($val)); print "'$_'\n" foreach (trim(@list)); __END__

Hope this answers your question.

Replies are listed 'Best First'.
(ichimunki) Re x 2: Should we handle multiple arguments as a list?
by ichimunki (Priest) on Jul 22, 2001 at 07:14 UTC
    Even more fun (but less efficient) than this would be to just make the function recursive.

    sub add_two { my @in_values = @_; if( wantarray ) { #must use +0 to force scalar #otherwise we get deep recursion return map add_two( $_ ) + 0, @in_values; } else { return $in_value[0] + 2; } }