=over

=item $[
X<$[>

This variable stores the index of the first element in an array, and
of the first character in a substring.  The default is 0, but you could
theoretically set it to 1 to make Perl behave more like B<awk> (or Fortran)
when subscripting and when evaluating the index() and substr() functions.

As of release 5 of Perl, assignment to C<$[> is treated as a compiler
directive, and cannot influence the behavior of any other file.
(That's why you can only assign compile-time constants to it.)
Its use is highly discouraged.

Prior to Perl v5.10.0, assignment to C<$[> could be seen from outer lexical
scopes in the same file, unlike other compile-time directives (such as
L<strict>).  Using local() on it would bind its value strictly to a lexical
block.  Now it is always lexically scoped.

As of Perl v5.16.0, it is implemented by the L<arybase> module.

As of Perl v5.30.0, or under C<use v5.16>, or C<no feature "array_base">,
C<$[> no longer has any effect, and always contains 0.
Assigning 0 to it is permitted, but any other value will produce an error.

Mnemonic: [ begins subscripts.

Deprecated in Perl v5.12.0.

=back