ike*_*ami 14
在几乎所有情况下(即除非有理由不这样做),Perl返回两个静态分配标量中的一个:( &PL_sv_yes
对于true)和&PL_sv_no
(对于false).这是他们的详细信息:
>perl -MDevel::Peek -e"Dump 1==1"
SV = PVNV(0x749be4) at 0x3180b8
REFCNT = 2147483644
FLAGS = (PADTMP,IOK,NOK,POK,READONLY,pIOK,pNOK,pPOK)
IV = 1
NV = 1
PV = 0x742dfc "1"\0
CUR = 1
LEN = 12
>perl -MDevel::Peek -e"Dump 1==0"
SV = PVNV(0x7e9bcc) at 0x4980a8
REFCNT = 2147483647
FLAGS = (PADTMP,IOK,NOK,POK,READONLY,pIOK,pNOK,pPOK)
IV = 0
NV = 0
PV = 0x7e3f0c ""\0
CUR = 0
LEN = 12
Run Code Online (Sandbox Code Playgroud)
yes
是三重变量(IOK,NOK和POK).它包含一个等于1的有符号整数(IV),一个等于1的浮点数(NV)和一个等于1的字符串(PV).
no
也是三重变量(IOK,NOK和POK).它包含一个等于0的有符号整数(IV),一个等于0的浮点数(NV)和一个空字符串(PV).这意味着它将字符串化为空字符串,并将其编号为0.它既不等同于空字符串
>perl -wE"say 0+(1==0);"
0
>perl -wE"say 0+'';"
Argument "" isn't numeric in addition (+) at -e line 1.
0
Run Code Online (Sandbox Code Playgroud)
也不是 0
>perl -wE"say ''.(1==0);"
>perl -wE"say ''.0;"
0
Run Code Online (Sandbox Code Playgroud)
无法保证始终如此.并且没有理由依赖于此.如果您需要特定值,可以使用类似的东西
my $formatted = $result ? '1' : '0';
Run Code Online (Sandbox Code Playgroud)
它们返回一个特殊的false值,在字符串上下文中为"",但在数字上下文中为0(没有非数字警告).真正的价值并不是那么特别,因为它在任何一种情况下都是1.定义()并没有返回undef.
(您可以自己创建类似的值,例如Scalar::Util::dualvar(0,"")
.)
归档时间: |
|
查看次数: |
4373 次 |
最近记录: |