Data::Thunk
- самый прозрачный и надежный способ сделать это, о котором я знаю.
Однако я не большой поклонник этого или любых других подобных модулей или методов, которые пытаются скрыть себя от пользователя. Я предпочитаю что-то более явное, например, когда в коде используется значение, которое трудно вычислить, просто вызовите функцию для его получения. Таким образом, вам не нужно предварительно вычислять ваше значение, ваше намерение более четко видно, и вы также можете иметь различные варианты, чтобы избежать повторного вычисления значения, например, лексические замыкания, переменные состояния perl или модули типа Memoize
.