gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:52:09 25 4
gpt4 key购买 nike

我正在尝试执行此代码。让我感到困惑的是,为什么这种比较在 false 时不返回任何值。这是这些比较运算符的默认行为吗?

my $output = (2 <= 1); 
print "value=$output";

比较运算符是否会返回 undef当它的逻辑检查失败时?

最佳答案

relational operators

return 1 for true and a special version of the defined empty string, "" , which counts as a zero but is exempt from warnings about improper numeric conversions, just as "0 but true" is.



你得到的值实际上是一个双变量。它具有单独的数字和字符串值(实际上不是空字符串的特殊版本)。数值为 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 ""\0
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 .当您拥有的值不可打印时,这些会有所帮助。

关于perl - 当数值比较为假时,Perl 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26892957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com