为什么打印perl数组会有效?

时间:2013-10-31 22:38:28

标签: arrays perl

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

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

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

print "There are $i users";

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

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";