gpt4 book ai didi

perl - 在Perl中,是否有合适的方法将undef手动转换为0?

转载 作者:行者123 更新时间:2023-12-04 04:48:08 24 4
gpt4 key购买 nike

我有这种形式的片段:

my $a = $some_href->{$code}{'A'}; # a number or undef
my $b = $some_href->{$code}{'B'}; # a number or undef
$a = 0 unless defined($a);
$b = 0 unless defined($b);
my $total = $a + $b;

现实更加困惑,因为涉及两个以上的变量。

我真正想写的是这样的:
my $total = $some_href->{$code}{'A'} + $some_href->{$code}{'B'};

并将undef正确评估为0,但几乎在每次运行中我都会收到以下警告:
Use of uninitialized value in addition (+) at Stats.pm line 192.

使这些消息消失的最佳方法是什么?

注意:如果相关,我会“严格使用”和“使用警告”。

最佳答案

最好使用strictwarnings。警告的目的是在Perl看到可能是无意的行为(因此是不正确的)时提醒您。故意执行此操作时,最好在本地禁用警告。 undef在数字上下文中被视为0。如果您可以同时拥有未定义的值并将它们的评估结果都设为零,则只需禁用警告即可:

my $total;
{
no warnings 'uninitialized';
$total = $some_href->{$code}{A} + $some_href->{$code}{B};
}

注意:仅禁用所需的警告,并在尽可能小的范围内进行。

如果您不想禁用警告,则还有其他选择。从Perl 5.10开始,您可以使用 //(定义或)运算符来设置默认值。在此之前,人们经常使用 ||(逻辑或),但是对于评估结果为false的值,这可能会做错事。在Perl 5.10之前的版本中,默认值的可靠方法是检查它们是否为 defined
$x = $y // 42;             # 5.10+
$x = $y || 42; # < 5.10 (fragile)
$x = defined $y ? $y : 42; # < 5.10 (robust)

关于perl - 在Perl中,是否有合适的方法将undef手动转换为0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1351103/

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