my $out; Filter \*STDOUT, sub { $out = sprintf "%d: %s\n", 1, "@_"; () }; print "Foo"; UnFilter \*STDOUT; print $out eq "1: Foo\n" ? "ok 3\n" : "not ok 3\n"; #### sub Filter { my $fh = $_[0]; tie *{ $fh }, __PACKAGE__, @_; } sub UnFilter { my $fh = shift; { local $^W = 0; untie *{ $fh } } }