perl - 我无法使用运算符 >=~ 而 <=~ 有效
问题描述
$x = 0x90000000;
$y = 0x9004FFFF;
$z = 0xB001FFFF;
if(($y >=~ (/0x9001FFFF||0xB001FFFF/)))
{
print "print something!";
}
else
{
print "print nothing!";
}
if(($y <=~ (/0x9004FFFF||0xB001FFFF/)))
{
print "print something!";
}
else
{
print "print nothing!";
}
实际输出为:
print nothing!print something!
预期的输出是:
print something!print something!
解决方案
perl 中不存在运算符 >=~(或 <=~)
if(($y >=~ (/0x9001FFFF||0xB001FFFF/)))
实际上是:
if ($y >= (~ ($_=~/0x9001FFFF||0xB001FFFF/) ))
因为每个标量都匹配空字符串,所以这是
if ($y >= (~ (1) ))
我的 64 位 perl 中 1 的二进制“非”是 18446744073709551614
所以我们终于在
if ($y >= 18446744073709551614)
评估为假。
推荐阅读
- sql-server - 客户端和服务器无法通信,因为它们没有共同的算法。(微软 D365 - 亚马逊 EC2)
- javascript - 如果重复,如何删除最后一项?Javascript
- excel - 如何使用条件格式将日期变为红色、绿色或黄色
- node.js - 如何在不和谐 js 中使用消息获取?
- spring-boot - 如何在 Hibernate 中创建保存点 - Spring Boot
- android - 如何只实现一个圆形进度条,直到图像被滑动加载
- go - echo 框架,什么时候降级权限?
- java - 如何使用 RabbitMQ 将 Spring Boot 消费者的响应发送到 .NetCore Producer?
- arrays - 查找数组中特定索引的下一个索引和最后一个索引?
- wordpress - Wordpress 更新图形数据