Perl 有一个规范的 "true" 和 "false" 值,它用于布尔否定的情况!
or not
。
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
print Dumper !1; # outputs $VAR1 = '';
print Dumper !!1; # outputs $VAR1 = 1;
到目前为止一切都很好。
但是,当我查看这些值时Devel::Peek
,很明显它们不等同于文字''
and 1
,它们都是 SV PVNV 值。
$ perl -MDevel::Peek -E 'Dump ""; Dump !1;' 2>&1 | grep '^SV'
SV = PV(0x15e5140) at 0x1603298
SV = PVNV(0x15e3010) at 0x7814b0
$ perl -MDevel::Peek -E 'Dump 1; Dump !!1;' 2>&1 | grep '^SV'
SV = IV(0xfce228) at 0xfce238
SV = PVNV(0xfae030) at 0x7819f0
我已经用 Perl 5.16.3 和 Perl 5.20.0 对此进行了测试。
PVNV 不是比简单的 IV 大得多吗?这是 Perl 用内存换取速度的例子吗?