如何区分CLI& Perl中的CGI模式

时间:2010-06-21 16:53:03

标签: perl cgi command-line-interface

我应该编写一个Perl脚本,它既可以在命令行上运行,也可以作为CGI脚本运行。我无法确定如何区分这两种模式。

那么请你告诉我如何实现逻辑?

3 个答案:

答案 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}}。