Задача: имеется строка запроса вида: '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 примерами на разных языках программирования