如何在Perl中强制列表或标量上下文?
我对Perl中列表和标量上下文的一些细节有点困惑,我希望有人能帮我一点忙。我的最终目标是比较两个数组中的元素数量,只是其中一个数组是匿名数组,我无法让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
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)