0

HTML フォームを使用して変数を Perl CGI スクリプトに渡し、その変数を処理して別の HTML ページに出力できるようにしたいと考えています。

ここに私の HTML コードがあります: http://jsfiddle.net/wTVQ5/

HTML をリンクするための Perl CGI スクリプトを次に示します。これが私がやりたい方法です(より少ない行を使用し、おそらくより効率的であるため)。

#!/usr/bin/perl
use warnings; use strict;
use CGI qw( :standard);
my $query = CGI->new;

# Process an HTTP request
my $user = $query->param('first_name');

# process $user... for example:
my $foo = "Foo";
my $str = $user . $foo;

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Hello - Second CGI Program</title>";
print "</head>";
print "<body>";
print "<h2>Hello $str - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

これが私がチュートリアルから読んだ方法であり、私にとってより理にかなっています:

#!/usr/bin/perl
use warnings; use strict;

my ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}else {
   $buffer = $ENV{'QUERY_STRING'};
}
# Split information into name/value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%(..)/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
}
my $user = $FORM{first_name};

# process $user... for example:
my $foo = "Foo";
my $str = $user . $foo;

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Hello - Second CGI Program</title>";
print "</head>";
print "<body>";
print "<h2>Hello $str - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

ところで、これらは両方とも正しく機能しません。HTML ページの送信ボタンをクリックすると、変数を渡して処理し、HTML ページを出力する代わりに、スクリプトにリンクするだけです。

4

3 に答える 3

1

私はあなたが CGI の「標準」を使用しているように見えます。CGI->new を開始する必要はありません.

use strict;
use warnings;
use CGI qw( :standard );

my $user = param('first_name') || q/foo/;

print header, 
      start_html(-title => 'Hello'), h1('Hello ' . $user), end_html;
于 2013-05-04T20:49:52.870 に答える
1

httpd.conf を次のように編集する必要があります。

AddHandler cgi-script cgi pl
<Directory /path/to/cgi/files>
Options +ExecCGI
</Directory>

これをローカルで実行している場合は、ホーム ディレクトリ構造にpublic_htmlという名前のフォルダーを作成し、これを設定してスクリプトを実行することができます。それをその場所にマッピングするように構成するだけで済みます。

于 2013-05-04T22:09:28.393 に答える