Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Re^2: isa() on any scalar

by chromatic (Archbishop)
on Jun 10, 2005 at 18:56 UTC ( #465644=note: print w/replies, xml ) Need Help??

in reply to Re: isa() on any scalar
in thread isa() on any scalar

No, don't do that.

Assume that UNIVERSAL::new existed. Would you suggest always creating objects with UNIVERSAL::new( $class_name, %data ); too?

Try instead:

my $is_node = eval { $value->isa( 'Node' ) }; # handle not node case if $@ is true or if $is_node is false

This has the advantage of allowing subclasses of Node to override isa() as they see fit, of allowing objects that perform the Node role (see Class::Roles, for example) to work appropriately, and of catching an error if $value is an invalid invocant. It also avoids calling a parent class method specifically on a potential instance of a derived class, which is a bad idea.

Update: Expanded code slightly.

Replies are listed 'Best First'.
Re^3: isa() on any scalar
by gam3 (Curate) on Jun 11, 2005 at 02:15 UTC
    No don't do this either. An exception should only be used to catch exceptional events. Since it seems that $value is just as likely not to be a 'Node' as it is to be one you should not use an exception to test it.
    -- gam3
    A picture is worth a thousand words, but takes 200K.

      As I mentioned, if $value is not a valid invocant, it is an exceptional case.

      I'm not aware of any other idiom that respects potentially-overridden isa() methods and handles potentially invalid invocants in one statement. If you know one, please share.

      Scalar::Util's blessed() is pretty good, but that technique disallows calling isa() as a class method. Sometimes that's good. Sometimes it's not.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (3)
As of 2018-10-20 23:06 GMT
Find Nodes?
    Voting Booth?
    When I need money for a bigger acquisition, I usually ...

    Results (119 votes). Check out past polls.