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

Re^2: What operator should perl5porters use for safe dereferencing?

by Jenda (Abbot)
on May 29, 2012 at 14:49 UTC ( #973041=note: print w/ replies, xml ) Need Help??


in reply to Re: What operator should perl5porters use for safe dereferencing?
in thread What operator should perl5porters use for safe dereferencing?

eval{} surely works. But it works too well. Far too well! It'll happily eat any exception whatsoever. Sure you will be able to tell whether it's the kind of exception that happens when calling a method on an undef, but will it be one of the calls you have here or is it somewhere deep down within one of the methods?

<!-- Node text goes above. Div tags should contain sig only - ->

Jenda
Enoch was right!
Enjoy the last years of Rome.


Comment on Re^2: What operator should perl5porters use for safe dereferencing?
Re^3: What operator should perl5porters use for safe dereferencing?
by Anonymous Monk on May 31, 2012 at 07:23 UTC

    eval{} surely works. But it works too well. Far too well! It'll happily eat any exception whatsoever. Sure you will be able to tell whether it's the kind of exception that happens when calling a method on an undef, but will it be one of the calls you have here or is it somewhere deep down within one of the methods?

    For me, I don't see that as a problem, either I want exceptions, or I want to ignore them

    I doubt there exists a situation where I would want to ignore only this particular exception:

    Can't call method "%" on an undefined value

    But if there was, I'm sure I'd use one of cpan's exception filtering modules instead of  ~>

      I doubt there exists a situation where I would want to ignore all exceptions.

      There do exist situations in which I will want to catch and log any exception and move on to the next task though, but this is a different thing. There's a huge difference between being able to shorten

      my $age = do { my $boss = $company->boss(); my $wife = $boss ? $boss->wife() : undef; $wife ? $wife->age() : undef };
      to just
      my $age = $company~>boss()~>wife()~>age();
      and just ignoring anything that might happen while getting that info. Because, you know, if the company has no boss or the boss has no wife, then the age is actually undefined. On the other hand if there was a problem loading the data from the database or where ever, I want to know, because then the value is not undefined. It could not be "computed".

      Jenda
      Enoch was right!
      Enjoy the last years of Rome.

        Because, you know, if the company has no boss or the boss has no wife, then the age is actually undefined.

        Dare I suggest a Null wife?

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2014-04-19 02:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (475 votes), past polls