Карамба!
“В чем сила, брат?”, спрашивал как-то герой известного фильма, перефразируя эту фразу по отношению к 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.



1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5.00 out of 5)
Loading ... Loading ...


Comments

One Response to “GET parameters in perl without using CGI module”

  1. samlowry on февраля 3, 2007 9:42 дп

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

Leave a Reply