我从另一个函数接收哈希哈希,哈希哈希的一些元素可以是另一个哈希。我如何测试以查看某些内容是否为哈希值?
答案 0 :(得分:39)
根据您的需要,您需要使用ref
或reftype
(Scalar::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