Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Should we handle multiple arguments as a list?

by aquacade (Scribe)
on Jul 22, 2001 at 05:30 UTC ( [id://98748]=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://98748]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2024-03-29 15:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found