Задача: имеется строка запроса вида: 'param1=foo¶m2=bar...'
Необходимо получить хэш: (param1 => 'foo', param2=>'bar'...)
Прямолинейное решение:
sub query2hash {
my $query = shift;
my @arr;
foreach (split /&/, $query) {
push @arr, split /=/, $_;
}
@arr;
}
my $query = shift;
my @arr;
foreach (split /&/, $query) {
push @arr, split /=/, $_;
}
@arr;
}
query = 'param1=foo¶m2=bar¶m3=zoo'
arr = [ pair.split('=') for pair in query.split('&') ]
arr = [ pair.split('=') for pair in query.split('&') ]
[['param1', 'foo'], ['param2', 'bar'], ['param3', 'zoo']]
Проще простого:
sub query2hash {
map { split /=/ } split /&/, shift;
}
map { split /=/ } split /&/, shift;
}
my %params
= query2hash( 'param1=foo¶m2=bar¶m3=zoo' );
= query2hash( 'param1=foo¶m2=bar¶m3=zoo' );
См также:
- Функциональное программироване на Питоне -- статья из Wikipedia
- List Comprehension -- о List Comprehension c примерами на разных языках программирования
3 комментария:
Сергей, а можно ссылку на тест из новости "List Comprehension средствами Perl" поправить?
Она ни у кого не откроется, кроме вас, как автора.
Прошу прощения, я хотел сослаться не на сам тест, а на мой предыдущий пост. Что же касается вопроса, то он звучал так:
Напишите процедуры, которые:
http_GET_by_hash - по хэшу строит строку GET-запроса,
hash_by_http_GET - по строке GET-запроса строит хэш параметров/значений.
Питоновский map:
dict([tuple(a.split('=')) for a in 'a=b&c=d&e=f'.split('&')])
Отправить комментарий