gpt4 book ai didi

perl - 有 "0 but true",但是在 perl 中有 "42 but false"吗?

转载 作者:行者123 更新时间:2023-12-01 09:30:24 24 4
gpt4 key购买 nike

根据问题。我知道有“0 but true”,它在 bool 上下文中为真,否则为假,但可以在 bool 上下文中返回假但具有非零值(明显的地方是返回状态,其中 0 是成功和任何否则是错误)。

最佳答案

否。(除了对双变量和重载对象的乐趣)

Perl 标量的真实性主要取决于字符串值。如果不存在字符串值,则将使用数字字段。

假值是:undef , "" , 0 ,并通过首先测试字符串化来避免问题:"0" .

并非所有数字为零的结果都为假:"0E0"是真的,更自我记录的也是如此"0 but true" .后者是特殊情况,以避免出现非数字警告。

但是,输入 双变量 .标量的数字和字符串字段不必同步。一个常见的双变量是 $!变量是数字上下文中的 errno,但包含原因作为字符串的错误字符串。因此,可以创建一个带有数值 42 的双变量。和字符串值 "" ,这将评估为假。

use Scalar::Util qw/dualvar/;

my $x = dualvar 42, "";
say $x; # empty string
say 0+$x; # force numeric: 42
say $x ? 1 : 0; # 0

然后 重载对象 .以下类的实例将很好地字符串化,但在 bool 上下文中仍然评估为 false:
package FalseString;
sub new {
my ($class, $str) = @_;
bless \$str => $class;
}
use overload
'""' => sub { ${shift()} },
'bool' => sub { 0 };

测试:
my $s = FalseString->new("foo");
say $s;
say $s ? "true" : "false";

打印
foo
false

关于perl - 有 "0 but true",但是在 perl 中有 "42 but false"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16078156/

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