gpt4 book ai didi

perl - Perl 有 andand 吗?

转载 作者:行者123 更新时间:2023-12-03 18:15:31 25 4
gpt4 key购买 nike

我宁愿这样做:

say $shop->ShopperDueDate->andand->day_name();

与这个:
say $shop->ShopperDueDate->day_name() if $shop->ShopperDueDate;

有任何想法吗?

(这个想法的灵感来自于 Ruby andand 扩展。)

(实际上它是受到 Groovy 语言的启发,但大多数人并不知道 ;-)

更新 : 我认为 Maybe() 和 eval {} 都是很好的解决方案。这不是 ruby ,所以我不能指望从左到右阅读所有的方法/功能,所以也许肯定会有所帮助。然后当然 eval 确实是 perl 的方法。

最佳答案

你可以使用 Perl 的 eval捕获异常的语句,包括那些试图在未定义参数上调用方法的异常:

eval {
say $shop->ShopperDueDate->day_name();
};

由于 eval返回最后评估的语句,或 undef失败时,您可以将日期名称记录在变量中,如下所示:
my $day_name = eval { $shop->ShopperDueDate->day_name(); };

如果你真的想检查异常,你可以查看特殊变量 $@ .这通常是 Perl 内置异常的简单字符串,但如果异常源自 autodie,则可能是完整的异常对象。或其他使用对象异常的代码。
eval {
say $shop->ShopperDueDate->day_name();
};

if ($@) {
say "The error was: $@";
}

也可以使用 eval 将一系列命令串在一起。堵塞。下面将仅检查是否是周末,前提是我们在查找 $day_name 时没有抛出任何异常。 .
eval {
my $day_name = $shop->ShopperDueDate->day_name();

if ($day_name ~~ [ 'Saturday', 'Sunday' ] ) {
say "I like weekends";
}
};

你可以想到 evaltry 相同来自其他语言;事实上,如果你使用 Error来自 CPAN 的模块,那么您甚至可以拼写它 try .还值得注意的是 eval 的 block 形式(我在上面已经演示过)不会带来性能损失,而是与您的其余代码一起编译。 eval 的字符串形式(我没有展示)是完全不同的野兽,应该谨慎使用,如果有的话。
eval从技术上讲,它被认为是 Perl 中的一个语句,因此是少数几个在 block 末尾会看到分号的地方之一。如果不使用 eval 很容易忘记这些经常。

保罗

关于perl - Perl 有 andand 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/422837/

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