字符串连接和字符串重复运算符

时间:2013-07-28 03:02:55

标签: perl

我试图理解为什么会这样:

say 4 x 2.5 * 2;

生产

88

而不是

44444

如下:

say 4 x (2.5 * 2);

我试图解释第二个的方法是,因为运算符x期望一个数字作为正确的参数,2.5 * 2被计算为数字5,然后4被视为字符串,产生“44444”。但我无法解释第一个!将其更改为打印也无关紧要。

print 4 x 2.5 * 2 . "\n"

也给出了

88

当然,我不打算写这样的代码。我只是想了解这种行为。

1 个答案:

答案 0 :(得分:7)

重复运算符x和乘法*具有same precedence。两者都是左联想的。因此,

的正确括号
4 x 2.5 * 2

(4 x 2.5) * 2

因为x的第二个参数必须是整数,所以这相当于

(4 x 2) * 2

"44" * 2。我们有88

如果有疑问,请使用明确的parens让编译器明确表达您的意图:

say 4 x (2.5 * 2);