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

Andrew Shitov andy на shitov.ru
Сб Дек 22 14:37:16 PST 2007


Привет!

В разговоре с товарищем-рубистом о том, как написать парсер-декодер
строк 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;
    $_ = "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