如何确定Perl中变量的值是标量还是数组?

时间:2010-11-08 20:15:15

标签: perl

说我有这个:

my %hash;

$hash{"a"} = "abc";
$hash{"b"} = [1, 2, 3];

以后我怎样才能知道存储的内容是标量,如"abc",还是数组,如[1, 2, 3]

2 个答案:

答案 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