if (defined ref $thingy
...
let me point out that ref never returns undef. If its argument is not a reference, ref simply returns the empty string (even if called on undef!)
To have an idea on what I'm talking about (and on how common this redundant - and sometimes completely wrong - test is), have a look at here.
And to have a confirmation that a test like this is really superfluous (at best), have a look at the docs.
Update
Here is a slightly better crafted search - which searches just for the pattern defined\s*\(?\s*ref - which gives more results (though some of them are not pertinent to be honest).
Anyway thank everyone for the clarification about the origin of this meme (though now I have the same n1vux's curiosity
Ciao, Emanuele.
Legacy (Score:1)
I think it used to return undef on older Perls, which is where that meme came from.
Re: (Score:1)
Returns a TRUE value if EXPR is a reference, FALSE otherwise.
which could mean it returns "" or undef or alternates between them.
Re: (Score:1)
Do we know if it actually returned 'undef' or if it always returned q{} as it's FALSE (but defined) value?
Bill
# I had a sig when sigs were cool
use Sig;
Re: (Score:1)
if (ref $thingywork in all cases?Re: (Score:2)
This can be reduced to
even if
refever returnedundef(which, last I heard, has always been considered false). Which it doesn't, evenreturns a true boolean, a value like
!1. And then,suffices. No warnings, now, ever. But maybe it did warn, in the past.
Re: (Score:1)
Under the false assumption that if the argument is not a reference
refreturnsundef, a test like thisto check if
$thingyis a reference or not, would clearly be wrong, non just redundant (you can find an example of this here [google.com]).Anyway my main complaint was about the fact that, even if the code is formally correct (whereas the test is used to supposedly avoid the possible warning from a subsequent test), such
defined-ness test is redundant, or unnecessary,Re: (Score:1)
Please forget my previous pointless post: I wrongly assumed that DAxelrod was talking about
while he clearly saidCiao, Emanuele.