I have to say that according to the output of the following test script, the value of
$[ is definitely not read-only at run-time. You can keep assigning a new number to
$[ and change the subscript behaviour at run-time. However the use of
$[ = $a is not supported. The Perl documentation clearly states that
$[ is treated as a compiler directive and its use is discouraged. I suspect that Perl handles this special variable differently because of efficiency reasons (or because the whole idea of
$[ was a hack in the first place afterall).
my @elements = qw/ 0 1 2 3 4 5 6 7 8 9 /;
$[ = 0;
print $elements[1], "\n";
$[ = 1;
print $elements[1], "\n";
if ($[ == 1) {
$[ = 0;
print $elements[1], "\n";
}
# The following will fail at compile time
# $a = 0;
# $[ = $a; # reset
# print $elements[1], "\n";
And the output is -
1
0
1