关于Perl中的运算符“ x”

时间:2018-10-23 18:48:16

标签: string perl

我对以下代码输出感到困惑:

print "1234567890" x (10+9)/10;

输出为

1.23456789012346e+188.

我知道代码应该是这样才能获得预期的结果:

"1234567890" x ((10+9)/10)

但是为什么以前的代码会生成浮点数而不是字符串?在Perl中,运算符“ x”不是字符串运算符吗?

4 个答案:

答案 0 :(得分:6)

好吧,让我们看看perl在使用B::Deparse模块时如何对待该表达式:

$ perl -MO=Deparse,-p -e 'print "1234567890" x (10+9)/10;'
print((3993258840062839 * 2**573));

显然,它正在将其评估为数字。也许是因为分裂?让我们尝试将其取出。

$ perl -MO=Deparse,-p -e 'print "1234567890" x (10+9);'
print('1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890');

看起来正确。因此,基本上,它会打印出该数字,因为多亏了除法,您才将那个长字符串视为一个数字。

请注意,x/的优先级相同,并且保持关联,因此a x b / c被视为(a x b) / c

答案 1 :(得分:5)

http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity

x/具有相同的优先级。所以

print "1234567890" x (10+9)/10;

等同于

print(  ("1234567890" x (10+9)) / 10  );

请注意,x不仅是字符串重复运算符。它可以生成列表:(1) x 3(1, 1, 1)

答案 2 :(得分:3)

x是一个字符串运算符,但是您在它产生的字符串上使用/,该字符串将“ 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789123456789012345678901234567890123456789012345678901234567890”除以10。

答案 3 :(得分:1)

似乎1234467890被连贯了19次,然后除以10便产生了浮动。