Синтаксис
|
1 2 |
map BLOCK LIST map EXPR, LIST |
Описание
Функция map вычисляет BLOCK или EXPR для каждого элемента списка LIST, и возвращает список, который содержит преобразованные элементы LIST.
|
1 2 3 4 5 6 7 8 9 10 11 |
#!/usr/bin/perl -w use strict; my @list = qw(нет ни лета ни зимы ни весны); my @names = map {split ''} @list; foreach (@list) {print $_." "}; print "\n"; foreach (@names) {print $_." "}; print "\n"; |
Вывод:
|
1 2 3 4 |
%perl map.pl нет ни лета ни зимы ни весны н е т н и л е т а н и з и м ы н и в е с н ы |
По приниципу работы map напоминает foreach. В случае сложных вычислений, использование foreach может оказаться более предпочтительным, т.к. оно более наглядно и доступно для понимания.
От grep функция map отличается тем, что map возвращает список, который является результатом вычислений в рамках EXPR или BLOCK. А grep возвращает список элементов LIST, которые соответствуют заданному условию поиска в EXPR или BLOCK.
Т.е. по сути, grep используется в основном для поиска в заданном списке, а map — для преобразований.
Примеры использования map
Хэш на выходе
|
1 2 3 4 5 |
my @list = qw(нет ни лета ни зимы ни весны); my %names = map {$_ => 1} @list; foreach (keys %names) {print $_." = ". $names{$_}."\n"}; |
Вывод:
|
1 2 3 4 5 6 7 |
%perl map.pl весны = 1 лета = 1 зимы = 1 ни = 1 нет = 1 |
Преобразование ссылок
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/usr/bin/perl -w use strict; my @list = qw(<href="http://aninatalie.ru">MainPage</a>); map { s/\&/&/g; s/</</g; s/>/>/g; s/\"/"/g; s/\015//g;} @list; foreach (@list) {print $_.""}; |
Вывод:
|
1 2 3 |
%perl map.pl &lt;href=&quot;http://aninatalie.ru&quot;&gt;MainPage&lt;/a&gt; |