There's something which you are obviously missing. Let's see if I can explain this in such a way as the penny drops.
use strict; use warnings; $| = 1; my $filename = 'foo.txt'; open (FH, '>', $filename) or die "cannot open $filename for writing: $ +!"; my $wasout = select FH; print "In the file!\n"; # Here you print on FH which is open for writi +ng. No problem. close FH; print "OMG, a warning!\n"; # Here you print on FH but it is closed so +a warning is shown select $wasout; print "Sweetness and light.\n"; # Here you print on STDOUT again - no +warning. Joy! exit;
The above code generates only 1 warning (intentionally as an illustration for you). See select for all the good stuff. When you run this code you will see this on the terminal:
print() on closed filehandle FH at sel.pl line 11. Sweetness and light.
and this in foo.txt:
In the file!
Is it all clear now?
It's also worth noting that using a bareword (or other global) filehandle is rarely considered best practice in these modern times so that might be the next thing you could change.
Update: Fix in diagnostic for open: s/read/writ/ (thanks soonix for spotting).
In reply to Re^5: print() on closed filehandle WRITE_FH
by hippo
in thread print() on closed filehandle WRITE_FH
by TonyNY
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |