【发布时间】:2011-03-06 10:12:28
【问题描述】:
我应该编写一个 Perl 脚本,它既可以在命令行上运行,也可以作为 CGI 脚本运行。我无法确定我应该如何区分这两种模式。
那么你能告诉我如何实现逻辑吗?
【问题讨论】:
标签: perl cgi command-line-interface
我应该编写一个 Perl 脚本,它既可以在命令行上运行,也可以作为 CGI 脚本运行。我无法确定我应该如何区分这两种模式。
那么你能告诉我如何实现逻辑吗?
【问题讨论】:
标签: perl cgi command-line-interface
您可以检查是否存在任意数量的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";
}
【讨论】:
GATEWAY_INTERFACE。
猜测,$ENV{'GATEWAY_INTERFACE'} 从命令行运行时将为 NULL,并且在作为 CGI 运行时包含某些内容(例如 1.1)。
您需要尝试一下。
【讨论】:
由于这是一个常见问题,我想指出人们可能感兴趣的案例不止两个。对于更通用的解决方案:
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() 实现之前,您可能应该查看IO::Interactive 模块的作者的this post。
【讨论】: