Ceci & Tati

Perl POST/GET параметри

от на ное..21, 2007, категории Програмиране

Да речем че искате да прочетете променливите „month, day, year“ от долопосочения адрес.
http://blog.sharcom.org/sample/index.cgi?month=August&day=8&year=2005

В PHP става лесно:

<?
$month=$_POST[‘month’];
$day=$_POST[‘day’];
$year=$_POST[‘year’];

print „$month“;
print „$day“;
print „year“;
?>

Но в Perl не става толкова лесно, за целта трябва една подпрограмка 🙂 .

#!/usr/bin/perl

print „Content-Type: text/html\015\012\015\012“;

sub readallvariables {

if ($ENV{‘REQUEST_METHOD’} eq „POST“) {
read(STDIN,$in,$ENV{‘CONTENT_LENGTH’});
@in = split(/&/,$in);
foreach $i (0 .. $#in) {
$in[$i] =~ s/\+/ /g;
$in[$i] =~ s/%(..)/pack(„c“,hex($1))/ge;
($key,$val) = split(/=/,$in[$i],2);
$key=~ s/%(..)/pack(„c“,hex($1))/ge;
$val =~ s/%(..)/pack(„c“,hex($1))/ge;
$_POST{$key}=$val;
}
}

if ($record = $ENV{‘QUERY_STRING’}) {
@in=split /&/, $record;
foreach $i (0 .. $#in) {
$in[$i] =~ s/\+/ /g;
$in[$i] =~ s/%(..)/pack(„c“,hex($1))/ge;
($key,$val) = split(/=/,$in[$i],2);
$key=~ s/%(..)/pack(„c“,hex($1))/ge;
$val =~ s/%(..)/pack(„c“,hex($1))/ge;
$_GET{$key}=$val;$_REQUEST{$key}=$val;
}
}

if ($in = $ENV{HTTP_COOKIE}) {
@in = split(/;/,$in);
foreach $i (0 .. $#in) {
$in[$i] =~ s/\+/ /g;
$in[$i] =~ s/%(..)/pack(„c“,hex($1))/ge;
($key,$val) = split(/=/,$in[$i],2);
$key =~ s/%(..)/pack(„c“,hex($1))/ge;
$key =~ s/^ //;
$val =~ s/%(..)/pack(„c“,hex($1))/ge;
$_COOKIE{$key}=$val;
}
}

}

readallvariables;

print ‘RESULT:’.$_GET{‘month’}.’:’.$_GET{‘day’}.’:’.$_GET{‘year’}


1 Comment for this entry

  • Dimitar Petrov

    Затова има use CGI qw(:all);
    my $month = param(„month“);

    или my $cgi_obj = CGI->new();
    my $month = $cgi_obj->param(„month“);

    good luck

Вашият коментар

*
За да докажете че не сте бот, въведете този код
Anti-Spam Image

Нещто не намирате ли?

Потърси в блога ми:

Моля Ви не прекалявайте с информацията!