print
FILEHANDLE
LIST
print
LIST
print
This function prints a string or a comma-separated list of strings.
The function returns 1 if successful, 0 otherwise.
FILEHANDLE
may be
a scalar variable name (unsubscripted), in which case the variable
contains either the name of the actual filehandle or a reference to
a filehandle object from one of the object-oriented filehandle packages.
FILEHANDLE
may also be a block that returns either kind of value:
print { $OK ? "STDOUT" : "STDERR" } "stuff\n";
print { $iohandle[$i] } "stuff\n";
Note that if
FILEHANDLE
is a variable and the next
token is a term, it may be misinterpreted as an operator unless you
interpose a
+
or put parentheses around the arguments.
For example:
print $a - 2; # prints $a - 2 to default filehandle (usually STDOUT)
print $a (- 2); # prints -2 to filehandle specified in $a
print $a -2; # ditto (weird parsing rules :-)
If
FILEHANDLE
is omitted, the function prints to the currently
selected output filehandle, initially
STDOUT
.
To set the default output filehandle to something other than
STDOUT
use the
select
(
FILEHANDLE
) operation.[
]
If
LIST
is also omitted, prints
$_
. Note that, because
print
takes a
LIST
, anything in the
LIST
is evaluated in
list context, and any subroutine that you call will likely have one or more
of its own internal expressions evaluated in list context.
Thus, when you say:
print OUT <STDIN>;
it is not going to print out the next line from standard input, but all the rest
of the lines from standard input up to end-of-file, since that's what
<STDIN>
returns in list context. Also, remembering the
if-it-looks-like-a-function-it-is-a-function rule, be careful not to follow the
print
keyword with a left parenthesis unless
you want the corresponding right parenthesis to terminate the arguments to the
print
- interpose a
+
or put parens around all the arguments:
print (1+2)*3, "\n"; # WRONG
print +(1+2)*3, "\n"; # ok
print ((1+2)*3, "\n"); # ok