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.
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|