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.