首页 > 解决方案 > 我无法使用运算符 >=~ 而 <=~ 有效

问题描述

  $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

解决方案


perl 中不存在运算符 >=~(或 <=~)

if(($y >=~ (/0x9001FFFF||0xB001FFFF/)))

实际上是:

if ($y >= (~  ($_=~/0x9001FFFF||0xB001FFFF/) ))

因为每个标量都匹配空字符串,所以这是

if ($y >= (~  (1) ))

我的 64 位 perl 中 1 的二进制“非”是 18446744073709551614

所以我们终于在

if ($y >= 18446744073709551614)

评估为假。


推荐阅读