Как отличить режимы CLI и CGI в Perl - PullRequest
3 голосов
/ 21 июня 2010

Я должен написать скрипт на Perl, который можно запустить как из командной строки, так и как скрипт CGI. Я не смог определить, как я должен различать эти два режима.

Так, пожалуйста, дайте мне знать, как реализовать логику?

Ответы [ 3 ]

8 голосов
/ 21 июня 2010

Вы можете проверить наличие любого количества переменных среды CGI , например:

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";
}
2 голосов
/ 21 июня 2010

По предположению, $ENV{'GATEWAY_INTERFACE'} будет иметь значение NULL при запуске из командной строки и содержать что-то (например, 1.1) при запуске в качестве CGI.

Вам нужно будет попробовать его.

0 голосов
/ 30 ноября 2012

Поскольку это распространенный вопрос, я хочу отметить, что есть более чем два случая, которые могут заинтересовать людей. Для более универсального решения:

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 модуля.

...