{ package IO::Handle; use strict; use warnings; use Scalar::Util qw( ); sub can { my $self = shift; $self = 'IO::Handle' if !Scalar::Util::blessed($self); return $self->SUPER::can(@_); } } use strict; use warnings; $\="\n"; print "\\*STDOUT: ", \*STDOUT; print "*STDOUT: ", *STDOUT; print "*STDOUT{IO}: ", *STDOUT{IO}; print ''; for (1..2) { print "\\*STDOUT: ", (\*STDOUT) ->can('print') ||0; print "*STDOUT: ", *STDOUT ->can('print') ||0; print "*STDOUT{IO}: ", *STDOUT{IO} ->can('print') ||0; print ''; require IO::Handle; }