我有一个需要传递给子程序的变量。子程序很可能不需要这个变量,并且为变量提供值是很昂贵的。是否可以创建一个“延迟加载”对象,该对象仅在实际使用时才进行评估?我无法更改子例程本身,因此对于调用者来说,它必须仍然看起来像一个普通的 Perl 标量。
最佳答案
您需要查看 Data::Lazy 和 Scalar::Defer 。 更新: 还有 Data::Thunk 和 Scalar::Lazy 。
我自己还没有尝试过任何这些,但我不确定它们是否适合某个对象。为此,您可以尝试使用 Moose 类将真实对象保存在 lazy 属性中, handles
对象提供的所有方法。 (不过,如果子例程执行 isa
检查,这将不起作用,除非它调用 isa
作为方法,在这种情况下,您可以在类中覆盖它。)
关于perl - 如何延迟加载 Perl 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3792873/