我一直无法找到答案,也不确定perl是否可行,但我相信我应该能够做到这一点。
我目前是一个脚本,用户提供的参数如下:
perl X:\script.pl -ARG[0] "My Argument" -ARG[1] "Another Argument"
我想在我的网站上主持这个并允许观众通过HTML表单提供他们的论点,我已经阅读了CGI的Perl Docs但是它似乎没有回答我的问题或者我不理解文件正确。为了简化这个问题,这是我的脚本:
$name = "";
print "Hello $name";
如何设置我的HTML表单以将参数传递给$ name?
答案 0 :(得分:5)
要使用Perl进行CGI,只需使用CGI
module(预先安装Perl)。它将正确且安全地解析表单字段 ,并处理get
和post
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>
或其他任何内容。