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

如何在Perl中强制列表或标量上下文?,perl,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 t

我对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}
DB@a=([1,2,3,4],[5,6,7,8,9],[10,11])
DB@b=$a[1]
DB$c=@b
DB p$c
1#为什么不打印出5?
DB$d=$a[1]
DB p@$d
56789
DB p$$d
在(eval17)[/opt/local/lib/perl5/5.8.9/perl5db.pl:638]第2行不是标量引用。
DB@e=@a[1]
DB p@e
阵列(0x87c358)
DB p${@e}

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

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

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

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

您需要取消对arrayref的引用

@b=@{$a[1]}

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


print scalar@b

请参阅或阅读
print scalar{$a[1]}
perldoc-perlreftut(perldoc.perl.org/perlreftut.html)或数据结构烹饪书
perldoc-perldsc
(perldoc.perl.org/perldsc.html)