use IO::Socket::INET; use strict; use overload; use warnings; sub is_blessed { defined($_[0]) && ref($_[0]) && (index(overload::StrVal($_[0]),'=')>=0) && overload::StrVal($_[0])!~/^Regexp=SCALAR/? "blessed" : "not blessed"; } my $socket = IO::Socket::INET->new (); print overload::StrVal($socket),"is ",is_blessed($socket)," and\n"; foreach (qw(IO IO::Socket IO::Socket::INET GLOB HASH)) { print "is" .(UNIVERSAL::isa( $socket, $_ )? " a " : " not a ").$_."\n" ; } $socket =~ s/GLOB/HASH/; print "after s///\n"; print overload::StrVal($socket),"is ",is_blessed($socket)," and\n"; foreach (qw(IO IO::Socket IO::Socket::INET GLOB HASH)) { print "is" .(UNIVERSAL::isa( $socket, $_ )? " a " : " not a ").$_."\n" ; } __END__ IO::Socket::INET=GLOB(0x1ab52f0)is blessed and is not a IO is a IO::Socket is a IO::Socket::INET is a GLOB is not a HASH after s/// IO::Socket::INET=HASH(0x1ab52f0)is not blessed and is not a IO is not a IO::Socket is not a IO::Socket::INET is not a GLOB is not a HASH