как это работает: карта, используемая с тройным оператором перехвата и ()

В предыдущем вопросе мореплаватель спросил, как удалить первые 5 элементов из массива: Как удалить первые пять элементов массива?

Среди нескольких предложений Фридо предложил следующее:

my $ cnt = 0; @array = map {++ $ cnt

Я не понимаю бит (). Объясните, пожалуйста, как это работает, потому что я не могу понять это?

Я знаю, что тернарный оператор ловушки работает следующим образом: (если что-то) ? (затем сделайте это): (иначе сделайте это)

Например: $ a = 2; print ($ a == 2? 3: 4) # выводит: 3 потому что у нас есть: ($ a == 2? 3: 4) что означает: (если $ a равно 2)? (затем выведите 3): (в противном случае выведите 4)

поэтому с кодом friedo сначала $ cnt увеличивается до 1, затем мы имеем:

$ cnt что значит: если $ cnt меньше 5? then (): в противном случае $ _

Я могу увидеть, как работает бит $ _, потому что иногда я использую такую ​​карту:

@array = map {$ _, "\ n"} @array

Это копирует элемент из @array, помещает копию в $ , затем добавляет \ n новую строку, затем копирует значение из $ обратно в @array (и делает это со всеми значениями в @array, поэтому в основном это добавляет новые строки к каждому элементу в @array)

поэтому:
@array = map {если $ cnt меньше 5, то () иначе $ _} @array

означает что-то вроде:
@array = map {если $ cnt меньше 5, то () в противном случае скопируйте элемент обратно в @array}

, поэтому ясно () означает что-то вроде «избавься от него» но я просто не уверен, как это работает. Не могли бы вы объяснить это?

5
задан Community 23 May 2017 в 12:31
поделиться