On Jan 16, 3:52 pm, dpchr...@holgerdanske.com (David Christensen) wrote: > beginners: > > After RTFM, STFW, etc., I realized that print() was issuing a warning > and continuing. > > I came up with two solutions: > > 1. perldoc -f print() states "Returns true if successful". So: > > print $s @_ or die $!; > > The downside is that the warning still gets printed: > > print() on unopened filehandle NOSUCH at trap-print-errors2.pl line > 12. > > And $! isn't very meaningful: > > trapped error Bad file descriptor at trap-print-errors2.pl line 12. > > 2. The warnings pragmatic module has an option for turning warnings > into errors: > > use warnings FATAL => 'all'; > print $s @_; > > This eliminates the warning message and gives me a meaningful $@: > > trapped error print() on unopened filehandle NOSUCH at > trap-print-errors2.pl line 24. > > Much better! :-) > > HTH, > > David > > 2011-01-16 15:47:28 dpchrist@p43400e ~/sandbox > $ cat trap-print-errors2.pl > #!/usr/bin/perl > use strict; > use warnings; > $| = 1; > > sub myprint($@) > { > my $s = shift; > eval { > ### circumvent Can't use string ("*STDOUT") as a symbol ref... > no strict 'refs'; > print $s @_ or die $!; > }; > print "trapped error $@" if $@; > > } > > sub myprint2($@) > { > my $s = shift; > eval { > ### circumvent Can't use string ("*STDOUT") as a symbol ref... > no strict 'refs'; > use warnings FATAL => 'all'; > print $s @_; > }; > print "trapped error $@" if $@; > > } > > myprint '*STDOUT', "hello, world!\n"; > myprint2 '*STDOUT', "hello, world!\n"; > myprint '*NOSUCH', "goodbye, cruel world!"; > myprint2 '*NOSUCH', "goodbye, cruel world!"; > print "all done\n"; > > 2011-01-16 15:48:02 dpchrist@p43400e ~/sandbox > $ perl -c trap-print-errors2.pl > trap-print-errors2.pl syntax OK > > 2011-01-16 15:48:09 dpchrist@p43400e ~/sandbox > $ perl trap-print-errors2.pl > hello, world! > hello, world! > print() on unopened filehandle NOSUCH at trap-print-errors2.pl line 12. > trapped error Bad file descriptor at trap-print-errors2.pl line 12. > trapped error print() on unopened filehandle NOSUCH at > trap-print-errors2.pl line 24. > all done
It's interesting that you found the warning message to be meaningless, but the exact same message was helpful when you told the pragma to raise the level of warnings to be fatal. -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/