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