当数值比较为假时,Perl返回什么?

千鸟

我正在尝试执行此代码。让我感到困惑的是,为什么此比较在为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标量::的Utildualvar,你可以检查是否标是一个dualvar isdual

use Scalar::Util qw(isdual);
my $result = ( 1 == 2 );
print isdual($result) ? "dualvar" : "Not dualvar";

如果您想检查返回的值是否已定义(您说不是),则可以使用define进行检查但是,定义了一个空字符串。如果要检查它不是空字符串,可以使用length当您无法打印您拥有的值时,这些功能会有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么不进行比较就返回假?

来自分类Dev

为什么这个函数应该返回假时返回真?

来自分类Dev

Bcrypt比较为正确的密码随机返回false

来自分类Dev

浮点比较为零

来自分类Dev

浮点比较为零

来自分类Dev

为什么我的比较评估为假

来自分类Dev

#'等于比较与(列表7 1)为true,但与'(7 1)比较为false,为什么?

来自分类Dev

如何为数组中的特定数值返回真或假?

来自分类Dev

比较Perl中的多个数值

来自分类Dev

为什么使用“ is”运算符与True / False进行比较为什么不好?

来自分类Dev

在阵列上测试正则表达式时,为什么它返回假?

来自分类Dev

在阵列上测试正则表达式时,为什么它返回假?

来自分类Dev

为什么在while循环中不能将array [n]比较为null?

来自分类Dev

在Swift中将Int值与格式化字符串比较为Int时失败

来自分类Dev

为什么jquery $()。find()返回假肯定

来自分类Dev

为什么x =!5`返回假?

来自分类Dev

为什么获取文本会返回假?

来自分类Dev

为什么 SQL "sum" 返回假值

来自分类Dev

空数组在比较时返回false,但在单独返回时返回true ...为什么这样

来自分类Dev

比较字母和数字时,SWITCH返回TRUE。为什么?

来自分类Dev

Arduino字符串比较返回假...使用.readStringUntil函数

来自分类Dev

为什么字符串比较结果始终为假

来自分类Dev

将值比较为null的异常

来自分类Dev

将浮点数比较为整数

来自分类Dev

函数值是否为null时返回

来自分类Dev

为什么我的查询结果返回我为假

来自分类Dev

为什么复选框返回假值?

来自分类Dev

为什么子菜单中的锚点返回假?

来自分类Dev

为什么这个 .every() 函数返回真然后假?

Related 相关文章

热门标签

归档