Cool'n'all as that is, by deferring the construction of constants to runtime, you disavail yourself of various compile-time optimisations that Perl has.
Even the very act of interpolating a read-only variable is an active pessimisation, as whilst perl will enforce the read-onliness, Perl does not (cannot) know that it need not re-interpolate the variable every time it is used:
use constant CONSTANT => 10;; Internals::SvREADONLY( my $READONLY = 10, 1);; [Type of arg 1 to Internals::SvREADONLY must be one of [$%@] (not scal +ar assignment) at (eval 11) line 1, near "1)" $READONLY = 10; Internals::SvREADONLY( $READONLY, 1);; ++$READONLY;; [Modification of a read-only value attempted at (eval 13) line 1, <STD +IN> line 6. cmpthese -1,{ a=>q[ for(1..1000){ my $string = "the constant is " . CONSTANT . " +\n" } ], b=>q[ for(1..1000){ my $string = "the readonly is $READONLY\n"; } + ], };; Rate b a b 3893/s -- -46% a 7236/s 86% --
A small a difference as that may be; it is all those avoidable small bits that add up.
In reply to Re^4: question regarding "Tie" in Perl
by BrowserUk
in thread question regarding "Tie" in Perl
by lightoverhead
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |