在Perl脚本中同时使用ARGV和CGI
我正在编写一个可以从命令行和网页运行的Perl脚本。脚本接收两个参数,如果从命令行启动,则通过$ARGV读取这些参数;如果从网页启动,则通过CGI读取这些参数。我该怎么做在Perl脚本中同时使用ARGV和CGI,perl,command-line,parameters,cgi,Perl,Command Line,Parameters,Cgi,我正在编写一个可以从命令行和网页运行的Perl脚本。脚本接收两个参数,如果从命令行启动,则通过$ARGV读取这些参数;如果从网页启动,则通过CGI读取这些参数。我该怎么做 my $username; my $cgi = new CGI; #IF CGI $username = $cgi->param('username'); #IF COMMAND LINE $username = $ARGV[0]; 当通过CGI调用时,您的脚本将被额外设置。您可以在您的if条件下使用它们 例如,您可以
my $username;
my $cgi = new CGI;
#IF CGI
$username = $cgi->param('username');
#IF COMMAND LINE
$username = $ARGV[0];
当通过CGI调用时,您的脚本将被额外设置。您可以在您的if条件下使用它们 例如,您可以使用HTTP\u USER\u代理
if ( $ENV{HTTP_USER_AGENT} )
{
#cgi stuff
}
else
{
#command line
}
但是,如果您真正需要单独测试CGI脚本,请尝试ActiveState Komodo,调试器允许您在命令行上传递参数,而无需更改代码。引用文件:
如果您是从命令行或在perl中运行脚本
调试器,您可以向脚本传递关键字列表或
参数=命令行或标准输入中的值对(您可以
不必担心你的脚本会被欺骗而从
环境变量)
举个例子,这是一个做以下事情的问题:
perl script.cgi username=John
最干净的方法可能是将代码的主要部分放在一个模块中,并为每个接口(CGI和命令行)编写一个脚本 您可以测试是否存在CGI环境变量(
$ENV{SERVER\u PROTOCOL}
),以查看是否正在使用CGI,但如果将该脚本用作另一个CGI脚本的命令行脚本,则该测试将失败
如果希望通过@ARGV
传递的都是表单输入,请记住,如果脚本未作为CGI脚本调用,CGI(模块)将检查@ARGV
的输入。请参阅中标题为“调试”的部分。使用在不同服务器上工作的经战斗验证的环境自动检测(不仅仅是Apache)
因此,您可以使用以下代码:
if (defined $ENV{PATH_INFO} || defined $ENV{GATEWAY_INTERFACE}) {
# Go with CGI.pm
} else {
# Go with Getopt::Long or whatever
}
要检查的标准兼容变量称为
GATEWAY\u INTERFACE
:我想你是对的,事实上我将创建一个核心模块和两个单独的接口,谢谢大家:)