Using Filehandles
Once a filehandle is open for reading, you can read lines from
it just like you can read from standard input with STDIN. So, for example, to read lines from the
Unix password file:
if ( ! open PASSWD, "/etc/passwd") {
die "How did you get logged in? ($!)";
}
while (<PASSWD>) {
chomp;
...
}In this example, the die
message uses parentheses around $!.
Those are merely parentheses around the message in the output.
(Sometimes a punctuation mark is just a punctuation mark.) As you can
see, what we’ve been calling the “line-input operator” is really made of
two components; the angle brackets (the real
line-input operator) are around an input filehandle.
A filehandle open for writing or appending may be used with print or printf, appearing immediately after the
keyword but before the list of arguments:
print LOG "Captain's log, stardate 3.14159\n"; # output goes to LOG printf STDERR "%d percent complete.\n", $done/$total * 100;
Did you notice that there’s no comma between the filehandle and the items to be printed?[*] This looks especially weird if you use parentheses. Either of these forms is correct:
printf (STDERR "%d percent complete.\n", $done/$total * 100);
printf STDERR ("%d percent complete.\n", $done/$total * 100);Changing the Default Output Filehandle
By default, if you don’t give a filehandle to print (or to printf, as everything we say here about one
applies equally well to the other), the output will go to STDOUT. But that default may be changed with
the select ...