This is just for question regarding "Tie" behavior.
However, this implementation has advantage of using the tied variable as constant in a string which can be interpolated.
"use constant AVO => 6" can not interpolate it in a string.
| [reply] |
use constant AVO => 6;
...
print "The constant is " . AVO . "\n";
Or printf "The constant is %d\n", AVO;
print "The constant is ${ \AVO }";;
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.
| [reply] [d/l] [select] |
| [reply] |
use strict;
use warnings;
Internals::SvREADONLY(my $answer = 42, 1);
print "This interpolates: $answer\n";
$answer++; # dies
use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name
| [reply] [d/l] [select] |
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.
| [reply] [d/l] |