Michael G Schwern writes:
> "my $foo = $p || $q" is not boolean. I'm not even sure you can call
> it "pseudo-boolean" without understanding the surrounding code. How
> do you know that $q can never be false?
So we want some way of annotating the code which will let Devel::Cover
know that you're assuming that $p and $q won't both be false.
Devel::Cover wouldn't be the only beneficiary of having such an
assumption explicitly stated: other humans having to read the code might
appreciate it too.
I can see why having 'inline' directives specifically for Devel::Cover
could be seen as ugly, but if instead they are general-purpose
assumptions then it's obviously better to have them next to the code
that's relying on the assumption than in some other file.
A good way of putting assumptions into code is with (Michael's
excellent) Carp::Assert:
assert $p || $q, 'Either $p or $q must be supplied' if DEBUG;
That improves your code, makes it easier for other people who have to
deal with it, and should be enough to keep Devel::Cover happy.
> The other examples in the ticket play out the same way:
>
> bless {}, ref $class || $class;
>
> $class being false would be quite the error.
Ditto, so you could make the assumption explicit with an assertion. Or
perhaps something like Params::Validate would be better.
Smylers
--
May God bless us with enough foolishness to believe that we can make a
difference in this world, so that we can do what others claim cannot be done.