从HTML表单输入

时间:2012-08-21 17:57:12

标签: html perl

我一直无法找到答案,也不确定perl是否可行,但我相信我应该能够做到这一点。

我目前是一个脚本,用户提供的参数如下:

perl X:\script.pl -ARG[0] "My Argument" -ARG[1] "Another Argument"

我想在我的网站上主持这个并允许观众通过HTML表单提供他们的论点,我已经阅读了CGI的Perl Docs但是它似乎没有回答我的问题或者我不理解文件正确。为了简化这个问题,这是我的脚本:

$name = "";
print "Hello $name";

如何设置我的HTML表单以将参数传递给$ name?

1 个答案:

答案 0 :(得分:5)

要使用Perl进行CGI,只需使用CGI module(预先安装Perl)。它将正确且安全地解析表单字段 ,并处理getpost HTTP方法。这比编码或复制粘贴解决方案容易得多。只需编写一个小的CGI脚本来包装原始脚本或重写脚本以在CGI和命令行模式之间切换。

HTML:

<form method="post" action="myScript.pl">
  <input type="text" name="name" />
  <input type="submit" value="Submit /">
</form>

的Perl:

#!/usr/bin/perl
use strict; use warnings;
use CGI::Carp; # send errors to the browser, not to the logfile
use CGI;

my $cgi = CGI->new(); # create new CGI object

my $name = $cgi->param('name');

print $cgi->header('text/html');

print "Hello, $name";

您使用param方法获取数据字段。有关更多变化,请参阅文档。然后,您可以调用脚本并返回输出。您可能会使用qx{…}open来调用脚本并读取输出。如果要返回普通输出,可以尝试exec。请注意它不会返回(Content-type应为text/plain)。

my $arg0 = $cgi->param('ARG[0]');
...;
my $output = qx{perl script.pl -ARG[0] "$arg0" -ARG[1] "$arg1"};

print $output;

my $arg0 = $cgi->param('ARG[0]');
...;

# prints directly back to the browser
exec 'perl', 'script.pl', '-ARG[0]', $arg0, '-ARG[1]', $arg1;

第一种形式允许你美化我们的输出,我们用HTML装饰它。第二种形式更有效,参数可以安全传递。但是,返回原始输出。

如果原始脚本应直接打印到浏览器,您可以使用system代替exec,但您必须重新获得控制流,例如关闭<div>或其他任何内容。