1

我有以下函数返回一个数组:

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

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

print "There are $i users";

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

4

2 回答 2

11

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

于 2013-10-31T22:40:18.330 回答
0

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

来自Perldata上的 Perldoc

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

当你说:

$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";
于 2013-11-01T00:42:25.947 回答