我正在尝试执行此代码。让我感到困惑的是,为什么此比较在为false时不返回任何值。这是这些比较运算符的默认行为吗?
my $output = (2 <= 1);
print "value=$output";
undef
当比较运算符的逻辑检查失败时,它会返回吗?
返回1表示true,并返回已定义的空字符串的特殊版本“”,该字符串算作零,但可以免除有关不正确的数字转换的警告,就像“ 0但为true”一样。
您获得的值实际上是对偶变量。它具有单独的数字和字符串值(实际上不是空字符串的特殊版本)。数值为0,字符串值为空字符串。您使用的字符串部分为空,但0仍然存在。您可以使用Devel :: Peek查找变量记录:
use Devel::Peek;
my $result = ( 1 == 2 );
Dump( $result );
在幕后的SV(标量值)中,您可以看到PV中的字符串值和IV And NV中的数字值(整数和数值):
SV = PVNV(0x7fe602802750) at 0x7fe603002e70
REFCNT = 1
FLAGS = (PADMY,IOK,NOK,POK,pIOK,pNOK,pPOK)
IV = 0
NV = 0
PV = 0x7fe6026016b0 ""\0
CUR = 0
LEN = 16
也有其他类型的对偶变量。例如,$!
error变量具有错误号和错误文本(我在Mastering Perl中谈到了该错误)。通常不必担心,因为Perl针对上下文执行了正确的操作。
如果您始终想要一个数字值,请在数字上下文中使用它:
my $numeric = 0 + $result; # 0
您可以创建自己的dualvars标量::的Util的dualvar
,你可以检查是否标是一个dualvar isdual
。
use Scalar::Util qw(isdual);
my $result = ( 1 == 2 );
print isdual($result) ? "dualvar" : "Not dualvar";
如果您想检查返回的值是否已定义(您说不是),则可以使用define进行检查。但是,定义了一个空字符串。如果要检查它不是空字符串,可以使用length。当您无法打印您拥有的值时,这些功能会有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句