arybase
СОДЕРЖАНИЕ
ИМЯ
arybase - Установка базового индекса массива через $[
СИНТАКСИС
$[ = 1;
@a = qw(Sun Mon Tue Wed Thu Fri Sat);
print $a[3], "\n"; # prints Tue ОПИСАНИЕ
Этот модуль реализует переменную Perl $[. Не следует использовать её напрямую.
Присваивание $[ имеет эффект на этапе компиляции, устанавливая присвоенное значение (преобразованное в целое число) в качестве индекса первого элемента в массиве и первой буквы в подстроке в рамках окружающего лексического пространства.
Его можно записать с использованием или без local:
$[ = 1;
local $[ = 1; Он работает только в том случае, если присваивание может быть обнаружено на этапе компиляции, и присвоенное значение является константой.
Он влияет на следующие операции:
$array[$element]
@array[@slice]
$#array
(list())[$slice]
splice @array, $index, ...
each @array
keys @array
index $string, $substring # return value is affected
pos $string
substr $string, $offset, ... Как и в случае с базовым значением 0, отрицательные базы считаются с конца массива или строки, начиная с -1. Если $[ является положительным целым числом, индексы от $[-1 до 0 также считаются с конца. Если $[ отрицательно (хотя зачем так делать?), индексы от $[ до 0 считаются с начала строки, но индексы ниже $[ считаются с конца строки так, как будто база равна 0.
До Perl 5.16 индексы от 0 до $[-1 включительно для положительных значений $[ вели себя по-разному для разных операций; отрицательные индексы, равные или большие, чем отрицательное значение $[ также вели себя несогласованно.
ИСТОРИЯ
До Perl 5, $[ была глобальной переменной, которая влияла на все индексы массивов и смещения строк.
Начиная с Perl 5, она стала директивой на этапе компиляции, охватывающей весь файл, которую можно было сделать лексически-ограниченной с помощью local. "Охватывающая весь файл" означает, что присваивание $[ могло "просочиться" за пределы блока, в котором оно выполнялось:
{
$[ = 1;
# ... array base is 1 here ...
}
# ... still 1, but not in other files ... В Perl 5.10 она стала строго лексической. Поведение, охватывающее весь файл, было удалено (возможно, по неосторожности, но что сделано, то сделано).
В Perl 5.16 реализация была перемещена в этот модуль и вынесена из ядра Perl. Несогласованное поведение, которое происходило с индексами между -1 и $[ было сделано согласованным между операциями, а для отрицательных баз индексы от $[ до -1 включительно были сделаны согласованными между операциями.
ОШИБКИ
Сообщения об ошибках, которые упоминают индексы массивов, используют нулевую базу.
keys $arrayref и each $arrayref не учитывают текущее значение $[.
СМОТРИТЕ ТАКЖЕ
"$[" в perlvar, Array::Base и String::Base.
© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.28.3/arybase