2011-06-10 95 views
16

我正在學習用Perl編寫CGI應用程序 - Kevin Meltzer。布倫特米哈爾斯基

腳本的書大多與此開始:

#!"c:\strawberry\perl\bin\perl.exe" -wT 
# sales.cgi 
$|=1; 
use strict; 
use lib qw(.); 

什麼是行$ | = 1;如何分隔它,例如。 $ | = 1;或$ | = 1; ? 爲什麼要使用嚴格;在$ | = 1之後; ?

感謝

+9

用Perl編寫CGI應用程序是一本很好的書,但非常非常非常(10年!)。最佳實踐和語言生態系統在那個時候已經發展了很多,確保你還閱讀了一些最新的材料,搜索「現代perl」或「學習perl」 – mirod 2011-06-10 08:07:20

+3

@mirod只是爲[現代perl提供缺失的鏈接github](https://github.com/chromatic/modern_perl_book),因爲它一直處於活動狀態,並不時更新。 – mbx 2011-06-10 08:23:13

+0

@mirod現在你讓我懷舊了.. 1995年,我使用了Macintosh的Netscape,它可以放在一張1,44mb的軟盤上。 ;) – TLP 2011-06-10 08:39:56

回答

22

perlvar是你的朋友。它記錄了所有這些神祕的特殊變量。

$ OUTPUT_AUTOFLUSH(又名$ |):

如果設置爲非零,強制沖洗馬上和每一個書寫或打印當前選中的輸出通道後。默認值爲0(不管通道是否真的被系統緩衝; $ |只會告訴您是否在每次寫入後明確要求Perl刷新)。如果輸出到終端並且塊被緩衝,則STDOUT通常會被行緩衝。 設置此變量主要用於當您輸出到管道或套接字時,例如當您在rsh下運行Perl程序並且想要在輸出發生時看到輸出。 這對輸入緩衝沒有影響。請參閱getc。請參閱選擇如何選擇輸出通道。另見IO :: Handle。

助記符:當你想讓你的管道變熱時。

快樂編碼。


對於其他問題:

沒有理由認爲use strict;$|後,除由程序員約定。 $|等特殊變量不受這種嚴格的影響。間距也不重要 - 只要選擇你的慣例並保持一致。(我更喜歡空格。)

17

$| = 1;迫使每次寫入或打印後沖洗,這樣它產生的,而不是被緩衝的輸出儘快出現。

請參閱perlvar文檔。

$|是特殊變量的名稱。您不應在$|之間引入空格。

無論你是否使用=左右的空白對Perl都無所謂。我個人認爲使用空格會使代碼更具可讀性。

爲什麼use strict;進來腳本$| = 1;後,我不知道,但他們都諸如此類的事情你擺正在頂部,你必須把它們放到一個訂單或另一個。我認爲這不重要。

7

在腳本中放置use語句的位置並不重要,因爲它們都在編譯時得到評估。

$|是autoflush的內置變量。我同意在這種情況下,它是不明確的。但是,一個單獨的$在perl中不是一個有效的語句,所以通過消除的過程,我們可以說它意味着什麼。

use lib qw(.)看起來像是一件愚蠢的事情,因爲「。」在默認情況下已經在@INC。也許這是由於這本書很舊。這個語句告訴perl添加「。」到@INC數組,這是perl的「路徑環境」,即它在哪裏尋找模塊等。

+2

**在你的腳本中放置使用語句的位置並不重要**:不完全正確:'use strict'是許多*詞彙*編譯指示之一。如果你有'blah blah {use strict; blarg blarg} blah blah'在你的腳本中,只有「blarg blarg」將被嚴格的編譯指示覆蓋。 – daotoad 2011-06-10 14:11:01

+0

在污染模式下從@INC中刪除當前工作目錄,因此需要使用lib qw(。)將其添加回模塊。 – Weiyan 2011-06-12 11:21:39