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