我是Perl的新手。我正在尝试了解Perl上下文。我有以下Perl代码。
use strict;
use warnings;
use diagnostics;
my @even = [ 0, 2, 4, 6, 8 ];
my @odd = [ 1, 3, 5, 7, 9 ];
my $even1 = @even;
print "$even1\n";
当我执行代码时,我得到以下输出......
1
但是,正如我所读到的,下面的标量上下文应该将数组中的元素数量放在标量变量中。
my $even1 = @even;
所以,这对我来说很奇怪。而且,代码内部会发生什么?
答案 0 :(得分:8)
定义数组的正确语法是
my @even = ( 0, 2, 4, 6, 8 );
my @odd = ( 1, 3, 5, 7, 9 );
当您使用方括号时,您实际上是在创建一个匿名数组的引用(指针),并将引用存储在@even
和@odd
中。引用是标量,因此@even
和@odd
的长度为1。
有关参考资料的更多信息,请参阅Perl references tutorial。
答案 1 :(得分:4)
通过在Perl中使用方括号,您将创建一个数组引用而不是实际的数组。
您可以阅读手册中参考的工作原理:perldoc perlreftut
。用圆括号替换方括号,代码将按预期执行:
my @even = ( 0, 2, 4, 6, 8 );
my @odd = ( 1, 3, 5, 7, 9 );
my $scalar = @even;
print "$scalar\n";
将打印
5