我希望这能给出数组的长度。因为我认为$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然后实际得到长度。
答案 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)
您可以获得数组的长度
我的$ mo = @mo;
print $ mo;
我的$ mo =标量(@mo);
print $ mo;
我的$ mo = $#mo + 1;
打印$ mo;