Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
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 scrutinizing the Monastery: (15)
As of 2015-07-01 16:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (11 votes), past polls