Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re: Check whether a variable is a hash or not

by imp (Priest)
on Feb 15, 2007 at 17:15 UTC ( #600250=note: print w/replies, xml ) Need Help??

in reply to Check whether a variable is a hash or not

You can almost always use either ref or Scalar::Util's reftype, as mentioned by the other monks. The only time that approach would fail is when the object being tested acts like a hash using the magic of overload. In those rare cases the only solution I know is to try and use it like a hash.
{ package fakehash; use overload "%{}" => sub { return {1 => 2} }; sub new {my $c; bless \$c}; } use strict; use warnings; use Scalar::Util qw( reftype ); my $fake = fakehash->new; printf "fake is ref %s\n", ref $fake; printf "fake is reftype %s\n", reftype $fake; # Try to use $fake as a hashref. # The return value of eval should be 1 if the first # statement is successful, as 1 is the last statement executed # in the block # The assignment to (undef) is to avoid this warning: # "Useless use of a variable in void context" if ( eval {(undef) = %$fake; 1}) { print "fake is pretending to be a hashref\n"; }

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://600250]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (9)
As of 2017-11-24 17:02 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (351 votes). Check out past polls.