【问题标题】:How to distinguish between CLI & CGI modes in Perl如何区分 Perl 中的 CLI 和 CGI​​ 模块
【发布时间】:2011-03-06 10:12:28
【问题描述】:

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

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

【问题讨论】:

    标签: perl cgi command-line-interface


    【解决方案1】:

    您可以检查是否存在任意数量的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
    • @daxim:谢谢;我已将链接替换为更好的资源。
    【解决方案2】:

    猜测,$ENV{'GATEWAY_INTERFACE'} 从命令行运行时将为 NULL,并且在作为 CGI 运行时包含某些内容(例如 1.1)。

    您需要尝试一下。

    【讨论】:

    • 呃,为什么我被否决了?我的建议听起来并不太荒谬。至少可以留下评论你这个胆小鬼......
    • 为你点赞,在健壮性和向维护程序员表达意图方面,你有更好的答案。
    • @daxim 谢谢,开始怀疑我虽然非常生疏的 Perl 知识。
    【解决方案3】:

    由于这是一个常见问题,我想指出人们可能感兴趣的案例不止两个。对于更通用的解决方案:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 2012-03-08
      • 2023-03-15
      • 2010-09-26
      • 2020-02-12
      • 2011-10-10
      相关资源
      最近更新 更多