Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^6: Is this DBM::Deep behavior, or something with tie/bless? (ref)

by ysth (Canon)
on Feb 12, 2008 at 16:09 UTC ( #667599=note: print w/ replies, xml ) Need Help??


in reply to Re^5: Is this DBM::Deep behavior, or something with tie/bless? (ref)
in thread Is this DBM::Deep behavior, or something with tie/bless?

So just fix Data::Compare. The fixes would probably be quite simple. The best fix is to change such things to:
if( ! eval { @$requires; 1 } ) { # Can't be used as an array ref
It is fine to use ref as a Boolean test. Any other uses of ref I simply can't recommend.

Note that the above trick doesn't work for CODE references so you have to resort to one of the second-best methods. I'd use the following:

Wouldn't that give a useless use warning? I would suggest this instead, which also works for CODE.
if( ! eval { \@$requires } ) { # Can't be used as an array ref
Pre-perl 5.10, either has a problem with arrayrefs being able to be dereferenced as pseudo-hashes.


Comment on Re^6: Is this DBM::Deep behavior, or something with tie/bless? (ref)
Select or Download Code
Re^7: Is this DBM::Deep behavior, or something with tie/bless? (ref)
by tye (Cardinal) on Feb 12, 2008 at 16:50 UTC

    Yes, I have an open bug against Data::Diver for issuing warnings about pseudo-hashes due to this.

    You are right about the other warnings as well. Unfortunately, your alternative has other problems:

    my $foo; if( eval { \@$foo } ) { print $foo, $/; } __END__ ARRAY(0x34d10)

    In the case of CODE ref testing, there is a different problem:

    my $foo= "not_a_code_reference"; print "oops!\n" if eval { \&$foo };

    Of course, in some situations, one could consider the latter a feature. But mostly I think it would be unwanted.

    It is very sad that Perl still doesn't provide decent tools for determine the data type(s) of a reference. It is no wonder nobody gets this right.

    - tye        

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2014-08-20 23:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (125 votes), past polls