package hyundai{ sub TIEHANDLE{ my $class = shift; my $oldhandle = shift; return bless ({"handle" => $oldhandle}, $class); } my $mask = sub{ (my $text = shift()) =~ s/a/b/g; # replaces a with b return $text; }; sub PRINT{ my $self = shift; die("Not a ref") if !ref($self); my $text = join('',@_); print STDERR ("STDOUT: ", \*STDOUT, "\n"); # prints GLOB(0x880a20) print STDERR ("STDERR: ", \*STDERR, "\n"); # prints GLOB(0x880a80) print STDERR ("handle: ", \$self->{"handle"}, "\n"); # prints GLOB(0x8806c0) $self->{"handle"}->print( &$mask($text) ); # infinite recursion ! } }; print("Hello world 1 aaaaaaa\n"); my $oldhandle = *STDOUT; undef(*STDOUT); tie *STDOUT, "hyundai", $oldhandle; print("Hello world 2 aaaaaaa\n");