为什么下面的代码会返回11:@myarray =(“Rohan”);
我得到的解释是: - 另一方面,表达式$ scalar x $ num_times返回一个字符串,其中包含字符串连接在一起的$ scalar $ num_times副本。
所以它应该给10而不是11 ...
代码如下: -
print "test:\n";
@myarray = ("Rohan"); # this returns 11
##@myarray = ("Rohan","G"); this returns 22
@myarray2 = (@myarray x 2);
@myarray3 = ((@myarray) x 2); #returns Rohan,Rohan and is correct
print join(",",@myarray2,"\n\n");
print join(",",@myarray3,"\n\n");
答案 0 :(得分:4)
Perl完全按照你的要求行事。在第一个示例中,数组位于标量上下文中并返回其长度。然后将其与自身连接两次。在第二个示例中,列表上下文中包含数组,x
运算符重复列表。
答案 1 :(得分:4)
正在发生的事情是x
运算符不仅向其右侧操作数提供标量上下文,而且也向左 - 和操作数 - 除非 LHO被 literal parens所包围。
这条规则是由于Perl根本不了解列表作为LHO时向后兼容超级古老的Perl代码。这可能是v1 vs v2的事情,v2 vs v3的事情,或者v3 vs v4。不记得了;不过,很久以前它是非常。古老遗产。
由于N中的标量上下文中包含N个元素的数组,因此在您的方案中生成N == 1
和"1" x 2 eq "11"
。