You should be able to inherit from Tie::Handle (part of the
standard distribution) and override any methods you wish to
define yourself:
package MySTDOUT;
use Tie::Handle;
@ISA = qw/Tie::Handle/;
sub TIEHANDLE {
my $class = shift;
bless {}, $class;
}
package main;
tie *STDOUT, 'MySTDOUT';
For example, maybe you want to trap every call to STDOUT
and prefix each argument with a string of your own:
package MySTDOUT;
use Tie::Handle;
@ISA = qw/Tie::Handle/;
sub TIEHANDLE {
my $class = shift;
bless {}, $class;
}
sub PRINT {
my $self = shift;
my $caller = caller;
print STDERR map "$caller: $_", @_;
}
package main;
tie *STDOUT, 'MySTDOUT';
print "Foo";
Prints
main: Foo
Take a look at the Apache module and
Apache::Filter for
some examples of tying STDOUT.