On 4/7/06, David Wright <[EMAIL PROTECTED]> wrote: > > On Fri, 7 Apr 2006, demerphq wrote: > > > On 4/7/06, Adam Kennedy <[EMAIL PROTECTED]> wrote: > >> Just because I (repeatedly) attack chromatic over UNIVERSAL::isa/can > >> nobody should be under the impression that using the functions directly > >> is in any way a good thing. > >> > >> The only cases for which it's genuinely useful is asking "ignoring what > >> you say you are in OO terms, what are you actually implemented as > >> underneath". > > > The only advantage I can think of using the function form of isa/can > > is that you dont have to do a ref test first. Or if you want to find > > out if a module is lying to you about what it isa/can do. But its not > > actually that useful to find out how the module is implemented > > underneath, nor is that useful for finding out how an object can be > > used/dereferenced. > > Your $thingy could be a hashref, in which case $thingy->isa will die.
Yes, thats what I meant, I should have said blessed() not ref(). > I've been using it a lot recently to catch exceptions. What's so wrong > with the below, almost identical to the example in perldoc -f die? I'd > rather not die again immediately by assuming [EMAIL PROTECTED]>isa will work. > > eval { > # do some stuff > }; > > if ( $@ ) { > if( UNIVERSAL::isa($@, 'My::Exception') ) { > # known exception, handle appropriately > } > else { > die "Ooops-a-daisy: $@"; > } > } Well, the problem with that is as chromatic says: What happens if $@ is an object that is pretending to be a My::Exception (ie, interface compatible but not isa)? I think he would say it should be rewritten as if (blessed($@) and [EMAIL PROTECTED]>isa('My::Exception')) { ... } But the problem with that is blessed() wasnt even core until 5.8.x, and isn't a true keyword but an exported sub. So you are putting a dependency on a module that wont always be around. IMO if the only kind of exception classes involved are your own then there is no point. cheers, Yves -- perl -Mre=debug -e "/just|another|perl|hacker/"