Янв
30
Карамба!
“В чем сила, брат?”, спрашивал как-то герой известного фильма, перефразируя эту фразу по отношению к perl можно ответить - “Cила в модулях”!
Стоит только зайти на CPAN и там можно отрыть великое множество полезностей:
- Проверить PageRank? Пожалуйста – WWW::Google::PageRank,
- Написать своего бота? Вуаля – LWP.
Cписок можно продолжать очень долго, есть к примеру замечательный модуль CGI, который, к примеру, позволяет с легкостью получить GET параметры из QUERY_STRING:
use CGI; my $cgi = new CGI; my $foo = $cgi->param('bar');
И все замечательно работает! Но, зачем цеплять такой монстр, если нам надо получить только GET параметры, следовательно, попробуем обойтись без него:
my @pairs = split(/&/, $ENV{'QUERY_STRING'});
my $PARAMS = {};
foreach my $pair (@pairs) {
my ($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$PARAMS->{$name} = $value;
}
Но, если какой-нибудь злодей вместо “%3D” впихнет в URI незаэскейпленый знак равенства “=”, то быстренько все накроется, так что в строчку со сплитом (split) лучше добавить:
my ($name, $value) = split(/=/, $pair, 2);
Что сие означает можно поглядеть на perldoc.



Мой восторг с соплями по поводу CPAN-а уже прошел, после того, как я обнаружил, что HTML::Forms осирается на некорректном form method.