gpt4 book ai didi

perl - 如何在读取而不是写入深度散列中不存在的键时让 Perl 死掉?

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

我正在使用动态多级哈希,从中读取数据但也写入数据。
对我来说一个常见的陷阱是访问不存在的键(错别字、数据库修订等)。我得到 undef s 传播到其他部分并导致问题。我要die每当我尝试读取一个不存在的 key ,但仍被允许添加新 key 时。
所以想要的行为是:

my %hash;
$hash{A} = 5; # ok
print $hash{A}, "\n"; # ok
print $hash{X}, "\n"; # should die
$hash{B}{C}{D} = 10; # ok
print $hash{B}{C}{X}, "\n"; # should die
我之前发过一个 similar question并得到了很好的答案。我特别喜欢接受的那个,它允许使用普通的散列语法。唯一的问题是我不确定如何轻松地将其推广到上面的示例中的深度哈希。
附言
我发现这个功能真的很有用,我想知道我是否遗漏了什么,因为它似乎不是很受欢迎。也许从/向同一个哈希读/写并不常见?

最佳答案

warnings pragma 打开然后你得到 Use of uninitialized value in print at...在你想死的两行警告。

所以如果你让 warnings 致命然后他们会死:

use warnings FATAL => 'all';

更新

根据您发表的评论,我假设您的常见案例问题是这样的:
my $x = $hash{B}{C}{X};

在您实际使用 $x 之前,它不会抛出警告/错误稍后的。

为了解决这个问题,你可以这样做:
my $x = $hash{B}{C}{X} // 'some default value';

my $z = $hash{B}{C}{Z} // die "Invalid hash value";

不幸的是,以上将意味着很多额外的输入:(

这里至少有一个捷径:
use 5.012;
use warnings FATAL => 'all';
use Carp 'croak';

# Value Or Croak!
sub voc { $_[0] // croak "Invalid hash" }

然后下面会呲牙咧嘴!
my $x = voc $hash{B}{C}{X};

希望这和致命警告对您有所帮助。

/I3az/

关于perl - 如何在读取而不是写入深度散列中不存在的键时让 Perl 死掉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740833/

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