如何在Perl中强制列表或标量上下文?

时间:2011-05-13 15:16:05

标签: perl

我对Perl中的列表和标量上下文的一些细节有点困惑,我希望有人可以帮我一点。我的最终目标是比较两个数组中的元素数量,除了其中一个数组是一个匿名数组,我不知道让Perl告诉我它有多少元素。这是我输入调试器的内容:`

DB<10> @a = ([1,2,3,4],[5,6,7,8,9],[10,11])

DB<11> @b = $a[1]

DB<12> $c = @b

DB<13> p $c
1             # Why didn't this print out 5?

DB<14> $d = $a[1]

DB<15> p @$d
56789

DB<16> p $$d
Not a SCALAR reference at (eval 17)[/opt/local/lib/perl5/5.8.9/perl5db.pl:638] line 2.

DB<17> @e = @a[1]

DB<18> p @e
ARRAY(0x87c358)

DB<19> p ${@e}

我出于有趣角色的组合尝试,有人可以告诉我我做错了什么吗?感谢。

1 个答案:

答案 0 :(得分:11)

[]将创建一个数组引用(这是一个标量)。

$a[1]指向[5,6,7,8,9](数组引用)

@b = $a[1]将创建一个新数组,其中包含一个项目(数组引用)。

您需要取消引用arrayref。

@b = @{$a[1]}

此时您可以获得其中的项目数:

print scalar @b