如何在Perl中测试“某些东西”是否为哈希?

时间:2010-09-24 16:55:14

标签: perl

我从另一个函数接收哈希哈希,哈希哈希的一些元素可以是另一个哈希。我如何测试以查看某些内容是否为哈希值?

4 个答案:

答案 0 :(得分:39)

根据您的需要,您需要使用refreftypeScalar::Util,核心模块)。如果引用是对象,ref将返回对象的类而不是基础引用类型,reftype将始终返回基础引用类型。

if (ref $var eq ref {}) {
   print "$var is a hash\n";
}

use Scalar::Util qw/reftype/;

if (reftype $var eq reftype {}) {
    print "$var is a hash\n";
}

答案 1 :(得分:15)

使用ref功能:

ref($hash_ref) eq 'HASH' ## $hash_ref is reference to hash
ref($array_ref) eq 'ARRAY' ## $array_ref is reference to array

ref( $hash{$key} ) eq 'HASH' ## there is reference to hash in $hash{$key}

答案 2 :(得分:5)

我一直使用isa,但如果被测试的东西不是对象(或者可能不是对象),则需要将其称为函数UNIVERSAL::isa

if ( UNIVERSAL::isa( $var, 'HASH' ) ) { ... }

答案 3 :(得分:3)

use Params::Util qw<_HASH _HASH0 _HASHLIKE>;

# for an unblessed hash with data
print "$ref is a hash\n" if _HASH( $ref ); 
# for an unblessed hash empty or not
print "$ref is a hash\n" if _HASH0( $ref ); 
# for a blessed hash OR some object that responds as a hash*
print "$ref is hashlike\n" if _HASHLIKE( $ref );

*通过overload

但你可能不需要最后一个。

请参阅Params::Util