May 26, 2018
Constant subs with deferred value calculation
constantdefer creates a subroutine which on the first call runs given code to calculate its value, and on any subsequent calls just returns that value, like a constant. The value code is discarded once run, allowing it to be garbage collected.
Deferring a calculation is good if it might take a lot of work or produce a big result but is only needed sometimes or only well into a program run. If it’s never needed then the value code never runs.
A deferred constant is generally not inlined or folded see “Constant Folding” in perlop since it’s not a single scalar value. In the current implementation a deferred constant becomes a plain constant after the first use, so may inline etc in code compiled after that see “IMPLEMENTATION” below.