标量上下文中的Perl数组

时间:2014-07-31 07:14:57

标签: 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;

所以,这对我来说很奇怪。而且,代码内部会发生什么?

2 个答案:

答案 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