2010-06-21 16 views
3

我應該編寫一個Perl腳本,它既可以在命令行上運行,也可以作爲CGI腳本運行。我無法確定我應該如何區分這兩種模式。如何區分Perl中的CLI和CGI模式

那麼你可以讓我知道如何實現邏輯?

回答

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"; 
} 
+0

非常感謝... – Bhavik 2010-06-21 17:01:26

+0

這是一個不好的資源,它沒有列出強制性['GATEWAY_INTERFACE'](http://www.faqs.org/rfcs/rfc3875.html#4.1.4。) 。 – daxim 2010-06-21 17:11:32

+0

@daxim:謝謝;我用更好的資源替換了鏈接。 – Ether 2010-06-21 17:35:58

2

在猜測,在命令行運行時$ENV{'GATEWAY_INTERFACE'}將是NULL,並且包含的​​東西(如1.1)時,爲運行一個CGI。

您需要嘗試一下。

+0

呃,爲什麼我被拒絕了?我的建議聽起來不太可笑。至少可以留下你的懦夫的評論... – Pete 2010-06-21 17:05:58

+0

Upvote for you,你有更好的答案在堅固性和向維護程序員表達意圖。 – daxim 2010-06-21 17:15:43

+0

@daxim謝謝,開始懷疑我的perl知識,儘管很生鏽。 – Pete 2010-06-21 17:22:37

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()實現之前,你應該看看IO::Interactive模塊作者的this post