perl 101,在数组变量上使用$获取数组的长度

air*_*net 4 perl

我期待这给出数组的长度.因为我认为$mo隐含的标量上下文.

但相反,我得到错误:

Global symbol "$mo" requires explicit package name at ./a.pl line 7.

#! /usr/bin/perl
use strict;
use warnings;

my @mo = (3,4,5);
print( $mo);
Run Code Online (Sandbox Code Playgroud)

UPDATE ::我认为mo是变量,$ mo上的sigil $正在使用标量上下文.我的问题更多的是关于sigil然后实际得到长度.

小智 5

为了获得@mo使用中的元素数量scalar @mo.

my $num_elements = scalar @mo;
Run Code Online (Sandbox Code Playgroud)

您可以省略scalar上下文指示它必须是标量的时间,例如在比较中:

if ($count < @mo) { print "$count is less than the number of elements" }
Run Code Online (Sandbox Code Playgroud)

您也可以使用$#mo,这是最后一个元素的索引(通常比元素的数量少一个).

my $last_index = $#mo;
Run Code Online (Sandbox Code Playgroud)

当您遍历数组并需要数组索引时,这很有用:

for (0..$#mo)
{
   print "Index $_ is $mo[$_]\n";
}
Run Code Online (Sandbox Code Playgroud)

$mo 获取数组元素时使用该表单:

my $second_element = $mo[1];
Run Code Online (Sandbox Code Playgroud)

$mo 只是它本身是一个完全独立的变量(尽管你可能不应该创建这样一个变量,因为它会让人感到困惑).