[Moscow.pm] a=b&c=d

Alex Shatlovsky shatlovsky на gmail.com
Сб Дек 22 15:16:39 PST 2007


Здравствуйте, Andrew.

Вы писали 23 декабря 2007 г., 1:37:16:

> Привет!

> В разговоре с товарищем-рубистом о том, как написать парсер-декодер
> строк query string вида a=b&c=d, чтобы получить хеш {a=>'b', c=>'d'},
> я загнал всю логику этого парсера в одну строку.

> Первоначальный ad-hoc-вариант был

>     foreach (split /&/) {
>         ($a, $b) = split /=/;
>         $h{$a} = $b;
>     }

> потом убрал временные переменные $a и $b:

>     /(.*?)=(.*)/, $h{$1} = $2 for split /&/;

> А вот как записать то же совсем без $1 и $2?

как-то так, например:

my %h = map { split /=/ } split /&/;


--


> Вся программа:

>     my %h;
>     $_ = "a=b&c=d";
>     /(.*?)=(.*)/, $h{$1} = $2 for split /&/;
>     print "$_=$h{$_}\n" for keys %h;


> Работает как ожидалось:

>     C:\_t>perl h.pl
>     c=d
>     a=b


> --
> Андрей Шитов
> ______________________________________________________________________
> andy на shitov.ru | http://www.shitov.ru

> ______________________________________________________________________
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
> http://mail.pm.org/mailman/listinfo/moscow-pm



-- 
С уважением,
А.Н.Шатловский



Подробная информация о списке рассылки Moscow-pm