标量上下文中的Perl数组

标量上下文中的Perl数组,perl,Perl,我是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;

我是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;

所以,这对我来说很奇怪。还有,代码中是怎么回事?

定义数组的正确语法是

my @even = ( 0, 2, 4, 6, 8 );
my @odd  = ( 1, 3, 5, 7, 9 );
使用方括号时,实际上是在创建一个指向匿名数组的引用(指针),并将引用存储在
@偶数
@奇数
中。引用是标量,因此
@偶数
@奇数
的长度是一


有关参考资料的更多信息,请参阅

通过在Perl中使用方括号,可以创建数组引用,而不是实际数组。 您可以阅读手册中的参考工作原理:
perldoc perlreftut
。将方括号替换为圆括号,代码将按预期执行:

my @even = ( 0, 2, 4, 6, 8 );
my @odd = ( 1, 3, 5, 7, 9 );
my $scalar = @even;
print "$scalar\n";
将打印

5