Подтвердить что ты не робот

Как перенести первую в пятую часть из последних элементов массива в Perl?

Я запускаю следующий код, и я пытаюсь напечатать первый элемент в массиве @rainbow через пятый-последний элемент в массиве @rainbow. Этот код работает для любых положительных индексов в пределах массива, но не для отрицательных:

@rainbow = ("a".."z");
@slice = @rainbow[1..-5];
print "@slice\n";
4b9b3361

Ответ 1

Вы хотите

my @slice = @rainbow[0 .. $#rainbow - 5];

Будьте осторожны, 1 - это второй элемент, а не первый.

Ответ 2

Оператор .. формирует range слева направо - если справа больше или равно слева, Кроме того, в Perl индексирование массива начинается с нуля.

Как насчет этого?

@slice = @rainbow[0..$#rainbow-5];

$#array дает вам индекс последнего элемента в массиве.

Ответ 3

Из первых двух предложений для оператора диапазона задокументированного в perlop:

Двоичный ".." - это оператор диапазона, который на самом деле является двумя разными операторами в зависимости от контекста. В контексте списка он возвращает список значений, отсчитывающих (вверх по единицам) от левого значения до правого значения. Если левое значение больше правого значения, оно возвращает пустой список.

Когда код не работает, разложите его, чтобы увидеть, что происходит. Например, попробуйте оператор диапазона, чтобы увидеть, что он произвел:

 my @indices = 1 .. -5;
 print "Indices are [@indices]\n";

Когда вы получили пустой список и поняли, что что-то происходит, что вы не понимаете, проверьте документацию на все, что вы пытаетесь сделать, чтобы проверить, что это делает то, что, по вашему мнению, должно делать.:)