假设我有以下Groovy代码:

String name = child.getParent()?.getParent()?.getName();


请注意,getParent()可能返回null,在这种情况下,代码将继续工作而不会引发空指针异常。

有没有办法在Perl 5.8的一行中清楚地做到这一点?我愿意编写一个通用的辅助方法来完成此任务。

我遇到了几个嵌套对象且必须执行以下操作的情况:

my $name = $child && $child->getParent && $child->getParent->getParent && $child->getParent->getParent->getName;


是的,这是一行,但是是丑陋的IMO。

最佳答案

在我看来,您的原始Groovy代码始终在可读性的边界上。我将以不同的方式实现它,但是在Perl中类似的表达是

my $name = (
    $node = $node->get_parent or
    $node = $node->get_parent or
    $node->get_name
);


语言的实用性不是由它以很少的字符表示复杂结构的能力来定义的

10-01 10:27