string - 关于 Perl 中的运算符“x”
问题描述
我对以下代码输出感到困惑:
print "1234567890" x (10+9)/10;
输出是
1.23456789012346e+188.
我知道代码应该是这样才能获得预期的结果:
"1234567890" x ((10+9)/10)
但是为什么前面的代码生成的是浮点数而不是字符串呢?运算符“x”不是 Perl 中的字符串运算符吗?
解决方案
好吧,让我们看看 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
。
推荐阅读
- javascript - 用于使用订阅计划创建帐户的 MongoDb 架构
- node.js - 响应 readFile 上的两个文件数据 - 节点
- database - 获取“java.sql.SQLException:值未绑定到语句”异常
- android - huwaei mate 20 pro 的 Youtube 播放器初始化错误
- r - 操作函数的封闭环境
- swift - macos CLLocationManager 提示
- angular - 带有 Fusionchart 的 Angular 6 - 找不到模块:错误:无法解析 fusionmaps/maps/fusioncharts.world
- symfony - Webpack 开发服务器监视 Twig
- php - 是否可以更改 Laravel 中表迁移的顺序?
- java - Jetty 9.4.14 ProxyServlet 增加或禁用超时