【问题标题】:perl $|=1; What is this?perl $|=1;这是什么?
【发布时间】:2011-06-10 16:49:46
【问题描述】:

我正在学习使用 Perl 编写 CGI 应用程序 - Kevin Meltzer。布伦特·米哈尔斯基

书中的脚本大多是这样开头的:

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

$|=1; 行是什么?如何分隔它,例如。 $| = 1;或 $ |= 1; ? 为什么要严格使用; $|=1 之后; ?

谢谢

【问题讨论】:

  • 用 Perl 编写 CGI 应用程序是一本好书,但是非常非常(10 年!)。最佳实践和语言生态系统在那段时间发生了很大变化,请确保您还阅读了一些最近的材料,搜索“modern perl”或“learning perl”
  • @mirod 只是将缺少的链接提供给modern perl on github,因为它仍然处于活动状态并且会不时更新。
  • @mirod 现在你让我怀旧了。1995 年,我使用了Netscape for the Macintosh,它可以装在 1.44mb 的软盘上。 ;)

标签: perl


【解决方案1】:

perlvar 是你的朋友。它记录了所有这些神秘的特殊变量。

$OUTPUT_AUTOFLUSH(又名 $|):

如果设置为非零,则在当前选定的输出通道上的每次写入或打印后立即强制刷新。 默认值为 0(无论通道是否真正被系统缓冲; $| 只告诉你是否明确要求 Perl 在每次写入后刷新)。如果输出到终端,则 STDOUT 通常会被行缓冲,否则会被块缓冲。 设置此变量主要在输出到管道或套接字时很有用,例如当您在 rsh 下运行 Perl 程序并希望看到正在发生的输出时。 这对输入缓冲没有影响。请参阅 getc。请参阅选择以了解如何选择输出通道。另请参阅 IO::Handle。

助记符:当你想让你的管道滚烫时。

编码愉快。


其他问题:

除了程序员的约定,use strict; 没有出现在$| 之后的原因。 $| 等特殊变量不受严格的这种方式影响。间距也不重要——只要选择你的约定并保持一致。 (我更喜欢空格。)

【讨论】:

    【解决方案2】:

    $| = 1; 在每次写入或打印后强制刷新,因此输出会在生成后立即显示,而不是被缓冲。

    请参阅perlvar 文档。

    $| 是特殊变量的名称。您不应该在 $| 之间引入空格。

    您是否在= 周围使用空格对Perl 来说并不重要。我个人认为使用空格使代码更具可读性。

    为什么use strict; 在你的脚本中出现在$| = 1; 之后我不知道,除了它们都是你会放在顶部的那种东西,而你必须以一种或另一种顺序排列它们。我认为哪个先出现并不重要。

    【讨论】:

    • 对于“自动刷新”,是否有其他(更易读)命令替代 $| = 1; 技巧?
    • 是的 - 在我在答案中链接到的文档中搜索 $|
    【解决方案3】:

    在脚本的哪个位置放置use 语句并不重要,因为它们都会在编译时进行评估。

    $| 是自动刷新的内置变量。我同意在这种情况下,它是模棱两可的。然而,一个单独的$ 在 perl 中不是一个有效的语句,所以通过排除过程,我们可以说出它的含义。

    use lib qw(.) 似乎是一件愚蠢的事情,因为“。”默认情况下已经在@INC 中。可能是因为书太旧了。该语句告诉 perl 添加“。”到 @INC 数组,这是 perl 的“路径环境”,即它在哪里寻找模块等。

    【讨论】:

    • 在脚本中放置 use 语句的位置并不重要:不完全正确:use strict 是众多 lexical 编译指示之一。如果您的脚本中有blah blah { use strict; blarg blarg } blah blah,则只有“blarg blarg”会被严格的杂注覆盖。
    • 在污点模式下会从@INC中删除当前工作目录,因此需要使用lib qw(.)将其添加回模块
    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 2010-12-28
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 2015-08-30
    • 2012-12-26
    • 2012-07-20
    相关资源
    最近更新 更多