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

时间:2013-02-28 08:22:36

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

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

3 个答案:

答案 0 :(得分: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 只是一个完全独立的变量(尽管你可能不应该创建这样的变量,因为它会让人感到困惑)。

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:1)

您可以获得数组的长度

  1.   

    我的$ mo = @mo;
          print $ mo;

  2.   

    我的$ mo =标量(@mo);
          print $ mo;

  3.   

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