当数字比较为假时,Perl会返回什么?
我正在尝试执行此代码.令我困惑的是为什么这个比较在错误时没有返回任何值.这是这些比较运算符的默认行为吗?
my $output = (2 <= 1); print "value=$output"; 当逻辑检查失败时,比较运算符是否会返回undef? 解决方法
relational operators
你得到的价值实际上是一个双变量.它有单独的数字和字符串值(实际上不是空字符串的特殊版本).数值为0,字符串值为空字符串.你使用了字符串部分,它是空的,但0仍然存在.您可以使用Devel::Peek查看变量记录: use Devel::Peek; my $result = ( 1 == 2 ); Dump( $result ); 在幕后的SV(标量值)事物中,您会看到PV中的字符串值和IV和NV中的数值(整数和数值): SV = PVNV(0x7fe602802750) at 0x7fe603002e70 REFCNT = 1 FLAGS = (PADMY,IOK,NOK,POK,pIOK,pNOK,pPOK) IV = 0 NV = 0 PV = 0x7fe6026016b0 "" CUR = 0 LEN = 16 还有其他种类的双重武器. $!例如,错误变量有错误号和错误文本(我在Mastering Perl中谈到它).这通常不必担心,因为Perl为上下文做了正确的事情. 如果您总是想要一个数值,请在数字上下文中使用它: my $numeric = 0 + $result; # 0 您可以使用Scalar::Util的dualvar创建自己的双变量,并且可以检查标量是否是具有isdual的双变量. use Scalar::Util qw(isdual); my $result = ( 1 == 2 ); print isdual($result) ? "dualvar" : "Not dualvar"; 如果你想检查你得到的值是否被定义(你说它不是),你可以用defined来检查.但是,定义了一个空字符串.如果要检查它不是空字符串,可以使用length.当您拥有的值不可打印时,这些会有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |