2011-06-10 94 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