Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: Testing failures: How to override print to make it fail?

by blokhead (Monsignor)
on May 05, 2005 at 03:43 UTC ( #454234=note: print w/replies, xml ) Need Help??

in reply to Testing failures: How to override print to make it fail?

You can force print to fail by selecting a filehandle that you know is unwritable. Here's a quick-n-dirty little module that returns a tied filehandle that fails when written to:
package NoPrint; use Symbol; sub new { my $sym = gensym; tie *$sym, $_[0]; bless $sym, $_[0]; } sub TIEHANDLE { bless {}, $_[0] } sub PRINT { return undef } sub PRINTF { return undef } sub WRITE { return undef }
You can now use it like this:
my $old_fh = select NoPrint->new; ## deep inside some test somewhere... print "foo\n" or warn "print failed (1)"; select $old_fh; ## now printing is back to normal again: print "foo\n" or warn "print failed (2)";
Update: An alternative that might even be is much cleaner is to localize *STDOUT:
{ local *STDOUT = NoPrint->new; print "foo\n" or warn "print failed (1)"; } print "foo\n" or warn "print failed (2)";


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://454234]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (4)
As of 2018-05-23 23:34 GMT
Find Nodes?
    Voting Booth?