4

我期待这能给出数组的长度。因为我认为$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);

更新:: 我认为 mo 是变量, $mo 上的符号 $ 使用标量上下文。我的问题更多是关于印记,然后是实际长度。

4

3 回答 3

5

为了得到正在@mo使用的元素的数量scalar @mo

my $num_elements = scalar @mo;

scalar当上下文要求它必须是标量时,您可以省略,例如在比较中:

if ($count < @mo) { print "$count is less than the number of elements" }

您也可以使用$#mo,它是最后一个元素的索引(通常比元素数小一)。

my $last_index = $#mo;

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

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

$mo 获取数组元素时使用的形式:

my $second_element = $mo[1];

$mo仅其本身就是一个完全独立的变量(尽管您可能不应该创建这样的变量,因为它会令人困惑)。

于 2013-02-28T08:29:03.377 回答
4

您正在尝试打印一个$mo不存在的标量变量。您需要在标量上下文中使用数组名称:

my @mo = (3,4,5);
print scalar @mo;

另一种方法是使用$#mowhich 将返回数组中的最大索引,在您的情况下为 2。

于 2013-02-28T08:27:30.957 回答
1

你可能会得到一个数组的长度

  1. 我的 $mo = @mo;
    打印 $mo;

  2. 我的 $mo = 标量 (@mo);
    打印 $mo;

  3. 我的 $mo = $#mo + 1;
    打印 $mo;

于 2013-02-28T09:23:56.873 回答