作为使用子例程引用 [默认] 的替代方法,您可以为您的属性提供一个构建器方法: ... 这有几个优点。首先,它将一大块代码移动到自己的命名方法中,这提高了可读性和代码组织。
因此,您的属性可以这样定义一个默认值:
has attr => (
is => 'ro',
builder => 'subroutine'
);
sub subroutine {
# figure out and return default value
}
我不明白为什么这必须与默认值分开。您不能只传递对命名子例程的引用吗?
has attr => (
is => 'ro',
default => \&subroutine
);
这不是更好的编程实践吗,因为保证不会意外引用不存在的子例程?您将使用逻辑引用而不是符号引用来引用该方法。