В предыдущем вопросе мореплаватель спросил, как удалить первые 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}
, поэтому ясно () означает что-то вроде «избавься от него» но я просто не уверен, как это работает. Не могли бы вы объяснить это?