说我有这个:
my %hash;
$hash{"a"} = "abc";
$hash{"b"} = [1, 2, 3];
以后我怎样才能知道存储的内容是标量,如"abc"
,还是数组,如[1, 2, 3]
?
答案 0 :(得分:14)
首先,您的数组引用示例是错误的 - 您的$hash{"b"}
将以标量值结束:您提供的列表的最后一个元素('c'in这种情况)。
那就是说,如果你确实想看看你是否有标量或引用,请使用ref
函数:
my %hash;
$hash{"a"} = "abc";
$hash{"b"} = [qw/a b c/];
if (ref $hash{"b"} eq 'ARRAY') {
print "it's an array reference!";
}
<强>文档强>
答案 1 :(得分:8)
首先,$hash{"b"} = qw/a b c/;
会将'c'
存储在$hash{"b"}
中,而不是数组中,您可能意味着$hash{"b"} = [ qw/a b c/ ];
会将对数组的引用存储到{{} 1}}。这是关键信息。除了标量之外的任何内容在分配给标量时都必须存储为参考。有一个名为ref
的函数会告诉您有关引用的信息,但如果引用已被祝福,它将为您提供对象类的名称。令人高兴的是,另一个名为$hash{"b"}
的函数始终返回Scalar::Util
中结构的类型。
reftype