Perl如何检测是从命令行运行还是从浏览器调用

dal*_*sam 3 perl

有没有好的方法来检测 Perl 脚本是从终端/DOS 调用还是从 Web 服务器调用。

我目前有这个代码:

sub cli {
    # return 1 if called from browser, 0 if called from command line
    if  (defined $ENV{GATEWAY_INTERFACE} ||  exists $ENV{HTTP_HOST}){
        return 0;
    }
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

但请注意,并非所有服务器都设置了这些 ENV 变量。

原因是如果脚本从终端运行,我将打印文本/纯格式消息,如果从浏览器运行,我将打印 HTML 格式的消息。

Oli*_*rLi 5

我通常这样做:

if (-t STDIN) {
    //This is running from a terminal
}
Run Code Online (Sandbox Code Playgroud)

阅读评论后编辑:我发现另一个问题详细介绍了不同的解决方案:How do I check if a Perl script is running in a Terminal?

  • 这将告诉您 STDIN 是否连接到终端。但是,比如说,`echo "foo" | 又怎么样呢?perl myscript.pl`。STDIN 不再附加到终端,但我们仍然从命令行运行脚本;不通过网络服务器。 (3认同)