http://qs1969.pair.com?node_id=217590


in reply to stringified references

The format you expected is still correct, although the document didn't say so, but ..., not just you can be cheated, even UNIVERSAL::isa can be cheated, try this:
use IO::Socket::INET; use strict; my $socket = new IO::Socket::INET(); print $socket, "\n"; print "is INET\n" if UNIVERSAL::isa($socket, "IO::Socket::INET"); print "is Socket\n" if UNIVERSAL::isa($socket, "IO::Socket"); print "is IO\n" if UNIVERSAL::isa($socket, "IO"); print "is GLOB\n" if UNIVERSAL::isa($socket, "GLOB"); print "is HASH\n" if UNIVERSAL::isa($socket, "HASH"); $socket =~ s/GLOB/HASH/; print "after s///\n"; print $socket, "\n"; print "is INET\n" if UNIVERSAL::isa($socket, "IO::Socket::INET"); print "is Socket\n" if UNIVERSAL::isa($socket, "IO::Socket"); print "is IO\n" if UNIVERSAL::isa($socket, "IO"); print "is GLOB\n" if UNIVERSAL::isa($socket, "GLOB"); print "is HASH\n" if UNIVERSAL::isa($socket, "HASH");

Replies are listed 'Best First'.
Re: Re: stringified references
by demerphq (Chancellor) on Dec 05, 2002 at 00:22 UTC
    Umm, I'm not sure I got your point. Heres what I got when I played with your code...
    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 blesse +d"; } 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

    --- demerphq
    my friends call me, usually because I'm late....