in reply to Re^4: print() on closed filehandle WRITE_FH
in thread print() on closed filehandle WRITE_FH
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).
|
|---|