gpt4 book ai didi

perl - 为什么 Perl 的规范 "true"和 "false"值在内部是 PVNV?

转载 作者:行者123 更新时间:2023-12-01 10:47:46 25 4
gpt4 key购买 nike

Perl 有一个规范的“true”和“false”值,它用于 !not 的 bool 否定情况。

#!/usr/bin/env perl

use strict;
use warnings;

use Data::Dumper;

print Dumper !1; # outputs $VAR1 = '';
print Dumper !!1; # outputs $VAR1 = 1;

到目前为止一切都很好。

但是,当我查看 Devel::Peek 的值时很明显它们不等同于字面的''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 用内存换取速度的例子吗?

最佳答案

不仅仅是 bool 否定;这些值由许多内置函数返回。

真的没有内存问题,因为它们每个只有一个实例。

特别是假值必须是一个 PVNV,因为它的字符串值 '' 和它的数值 0 不能从彼此派生(至少不会触发警告)。

关于perl - 为什么 Perl 的规范 "true"和 "false"值在内部是 PVNV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24075812/

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