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

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

@rainbow = ("a".."z");
@slice = @rainbow[1..-5];
print "@slice\n";
23
задан brian d foy 8 January 2010 в 10:33
поделиться

3 ответа

Хотите

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

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

39
ответ дан 29 November 2019 в 01:07
поделиться

Оператор .. формирует диапазон слева направо, если вправо больше или равно слева. Также в Perl индексирование массива начинается с нуля.

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

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

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

18
ответ дан 29 November 2019 в 01:07
поделиться

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

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

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

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

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

6
ответ дан 29 November 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: