我应该编写一个Perl脚本,它既可以在命令行上运行,也可以作为CGI脚本运行。我无法确定如何区分这两种模式。
那么请你告诉我如何实现逻辑?
答案 0 :(得分:8)
您可以检查是否存在任意数量的CGI environment variables,例如:
if ($ENV{GATEWAY_INTERFACE})
{
print "Content-type: text/plain\n\nLooks like I'm a CGI\n";
}
else
{
print "I'm just a plain command line program\n";
}
答案 1 :(得分:2)
猜测,从命令行运行时$ENV{'GATEWAY_INTERFACE'}
将为NULL,并且在作为CGI运行时包含某些内容(例如1.1)。
你需要尝试一下。
答案 2 :(得分:0)
由于这是一个常见问题,我想指出人们可能会对两种以上的案例感兴趣。对于一个更通用的解决方案:
use IO::Interactive qw( is_interactive );
if (exists $ENV{'GATEWAY_INTERFACE'}) {
# running as CGI
}
elsif (is_interactive()) {
# running from terminal, with a real live user
}
else {
# running from cron, system call, etc
}
如果您提示用户输入,则是您要检查的第二种情况。在您开始编写自己的is_interactive()
实现之前,您应该查看this post模块的作者{/ 3}}。