URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 32458
[ Назад ]

Исходное сообщение
"Как образумить map() ?"

Отправлено DerinI , 18-Июл-03 18:00 
  Добрый день.

  В ходе своей борьбы за оптимизацию просчета массива я обнаружил интересную функцию Perl map(). Судя по инструкции она должна была применять заданное выражение или функцию ко всем элементам списка. Ура !!!! решил я и написал

  @tmp = map( s/\)/ / )@tmp ; # удалим )

  Perl молча проглотил мой скрипт, но в ответ вернул массив из 8129 1 (единиц) Почесав затылок я заметил соответствие между числом единиц и числом строк исходного массива. Т. е. он заменил каждую строчку массива на результат s///
  Как же его образумить ?


Содержание

Сообщения в этом обсуждении
"Как образумить map() ?"
Отправлено planar , 19-Июл-03 11:19 
>  Добрый день.
>
>  В ходе своей борьбы за оптимизацию просчета массива я обнаружил
>интересную функцию Perl map(). Судя по инструкции она должна была применять
>заданное выражение или функцию ко всем элементам списка. Ура !!!! решил
>я и написал
>
>  @tmp = map( s/\)/ / )@tmp ; # удалим )
>
>
>  Perl молча проглотил мой скрипт, но в ответ вернул массив
>из 8129 1 (единиц) Почесав затылок я заметил соответствие между числом
>единиц и числом строк исходного массива. Т. е. он заменил каждую
>строчку массива на результат s///
>  Как же его образумить ?


map этого не делает. Она, можно сказать, эквивалент if. Для того, чтобы получить то что тебе надо, используй grep.



"Как образумить map() ?"
Отправлено poor bugger , 19-Июл-03 11:54 
@tmp=map{ s/\)//g; +$_} @tmp;

греп однако ловчее


"Как образумить map() ?"
Отправлено poor bugger , 19-Июл-03 12:04 
однако нет
с грепом та же тема

"Как образумить map() ?"
Отправлено planar , 19-Июл-03 13:26 
@area = grep(s/pattern//,@area); - точно работает.