Arrays 为什么打印perl数组会产生计数?

Arrays 为什么打印perl数组会产生计数?,arrays,perl,Arrays,Perl,我有以下返回数组的函数: sub getUsers() { @users[0] = 'test'; @users[1] = 'test2'; return @users; } @temp = getUsers(); $i = @temp; print "There are $i users"; 但当我打印出来时,它显示为数字2(数组的计数)。发生了什么?$i=是一个标量赋值,给出赋值标量上下文的右侧;当您在标量上下文中提到数组时,它将返回其长度。$i=是标量赋值,给

我有以下返回数组的函数:

sub getUsers() {
    @users[0] = 'test';
    @users[1] = 'test2';
    return @users;
}

@temp = getUsers();
$i = @temp;

print "There are $i users";

但当我打印出来时,它显示为数字
2
(数组的计数)。发生了什么?

$i=
是一个标量赋值,给出赋值标量上下文的右侧;当您在标量上下文中提到数组时,它将返回其长度。

$i=
是标量赋值,给出赋值标量上下文的右侧;在标量上下文中提到数组时,它将返回其长度。

在标量上下文中使用数组时,数组将返回数组中的项数

从Perldoc开始

标量上下文中的列表赋值返回赋值右侧的表达式生成的元素数

当你说:

$i = @temp;
您正在获取一个列表并试图将其分配给标量变量。您正在标量上下文中使用该数组。这样,就得到了数组的大小。(不是最大的索引。这就是
$#temp
将带给您的

您可以使用
scalar
函数强制标量上下文中的数组,否则它可能不是: ` 打印“数组中有“.scalar@foo.”项\n”

print
函数可以获取时间列表,而不仅仅是单个字符串。然后它使用变量
$,
的值加入数组

如果需要项目列表,请使用将列表合并为单个字符串:

print "There are " . scalar @foo . " items in the array\n";
print "They are " . join ( ", " $foo ) . ".\n";

在标量上下文中使用数组时,该数组返回数组中的项数

从Perldoc开始

标量上下文中的列表赋值返回赋值右侧的表达式生成的元素数

当你说:

$i = @temp;
您正在获取一个列表并试图将其分配给标量变量。您正在标量上下文中使用该数组。因此,您可以得到数组的大小。(不是最大的索引。
$\temp
将得到此值

您可以使用
scalar
函数强制标量上下文中的数组,否则它可能不是: ` 打印“数组中有“.scalar@foo.”项\n”

print
函数可以获取时间列表,而不仅仅是单个字符串。然后它使用变量
$,
的值加入数组

如果需要项目列表,请使用将列表合并为单个字符串:

print "There are " . scalar @foo . " items in the array\n";
print "They are " . join ( ", " $foo ) . ".\n";

将一个标量值赋给数组,因此它在标量上下文中求值,在Perl中,这意味着给我数组的长度。@guy,这是向后得到的。:)这是将数组分配给标量值。@friedo Doh!诵读困难症再次发作…相关问题您希望它打印什么?看起来您需要UER的计数。而且,
@users[0]
现在应该是
$users[0]
在赋值中。您将标量值赋给数组,因此它在标量上下文中求值,在Perl中,这意味着给我数组的长度。@squiguy,您得到的是向后的。:)这是将数组赋给标量值。@friedo Doh!诵读困难症再次发作…相关问题您希望它打印什么?看起来你想要的是乌尔伯爵。另外,
@users[0]
现在应该是作业中的
$users[0]
$i=@temp是void上下文中的标量赋值。您引用的段落不相关。Re“您正在获取一个列表并试图将其分配给一个标量变量。”不是真的。
$i=@temp。根据您的逻辑,
$i=(5,6,7)实际分配
7
$i=@temp是void上下文中的标量赋值。您引用的段落不相关。Re“您正在获取一个列表并试图将其分配给一个标量变量。”不是真的。
$i=@temp。根据您的逻辑,
$i=(5,6,7)应在实际分配
7
时分配
3