Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Re: Is reference blessed?

by gildir (Pilgrim)
on Nov 23, 2001 at 15:29 UTC ( [id://127094]=note: print w/replies, xml ) Need Help??


in reply to Re: Is reference blessed?
in thread Is reference blessed?

I think it should be
if (UNIVERSAL::can($ref,'isa')) { ...
But I see the point now.
As UNIVERSAL is the parent of every object (blessed reference) and it implements method 'isa', every beast that know how to call isa method must be an object.

Update: No, $r->can('isa') won't work (as I mentioned in the other reply) because if $r is not blessed, it will die on 'unblessed reference' error. UNIVERSAL::can($r,'isa') is real solution.

Update2: Even if I do refcheck, situation is the same. I just cannot call any method on non-blessed reference, not even the can() method. Consider $r={}; you cannot do $r->can() because $r is not blessed. And that is what I want to know, if $r is blessed or not. I know that it is a reference. Catching a die exception with eval is TIMTOWDI, but it does not look good to me :-)

Replies are listed 'Best First'.
(tye)Re: Is reference blessed?
by tye (Sage) on Nov 26, 2001 at 10:38 UTC

    The problem with just UNIVERSAL::can($ref,'isa') is that it can return a true value when $ref isn't even a reference. So you really have to make multiple tests:

    if( ! ref($r) ) { # no reference at all } elsif( ! UNIVERSAL::can($r,'can') ) { # unblessed ref } else { # blessed ref }
    or just:
    if( ref($r) && UNIVERSAL::can($r,'can') ) { # blessed ref }
    or
    if( ref($r) && eval { $r->can('can') } ) { # blessed ref }
    and I can't make a convincing case for one style over the other at the moment.

    And, yes, it would be nice if there were less overloaded versions of these things so that blessed returned the package that a reference was blessed into and ref just always returned the type of thing. That was a certainly a design mistake IMO.

            - tye (but my friends call me "Tye")

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://127094]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (3)
As of 2024-03-29 02:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found