首页 > 解决方案 > 关于 Perl 中的运算符“x”

问题描述

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

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

输出是

1.23456789012346e+188.

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

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

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

标签: stringperl

解决方案


好吧,让我们看看 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


推荐阅读