我有以下函数返回一个数组:
sub getUsers() {
@users[0] = 'test';
@users[1] = 'test2';
return @users;
}
@temp = getUsers();
$i = @temp;
print "There are $i users";
但是当我打印出来时,它显示为数字2
(数组的计数)。发生了什么?
$i =
是一个标量赋值,给出赋值标量上下文的右侧;当您在标量上下文中提及数组时,它会返回其长度。
在标量上下文中使用数组时,数组会返回数组中的项目数。
标量上下文中的列表赋值返回赋值右侧表达式生成的元素数...
当你说:
$i = @temp;
您正在获取一个列表并尝试将其分配给一个标量变量。您在标量上下文中使用该数组。因此,您获得了数组的大小。(不是最大的索引。这就是你$#temp
要得到的。
您可以使用该scalar
函数在标量上下文中强制一个数组,否则它可能不是:` print "There are " 。标量 @foo 。" 数组中的项目\n";
该print
函数可以获取时间列表,而不仅仅是单个字符串。然后它使用变量的值$,
加入数组。
如果您想要项目列表,请使用连接将列表连接成单个字符串:
print "There are " . scalar @foo . " items in the array\n";
print "They are " . join ( ", " $foo ) . ".\n";