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 ~>
| [reply] [Watch: Dir/Any] [d/l] |
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.
| [reply] [Watch: Dir/Any] [d/l] [select] |
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?
| [reply] [Watch: Dir/Any] |