使用Perl习语$ /和q ||以块方式读取文本文件

时间:2013-09-16 08:42:09

标签: perl

我正在尝试了解一些用于逐块读取文本文件的 Perl 代码。

文本文件MYFILE如下所示:

First block
First Line: Something in here
Second Line: More here
Third Line: etc.

Second block
First Line: Something in here
Second Line: More here
Third Line: etc.

代码用于提取找到正则表达式的块的行(它工作正常,我只是想理解它)

这是我不理解的代码部分:

local $/ = q||;
while (<MYFILE>) {
    do something;
}

有人可以向我解释一下local $/ = q||;行在做什么吗?

3 个答案:

答案 0 :(得分:10)

$/input record separator。 “这影响了Perl关于”线“是什么的想法。将其设置为空字符串,即''会导致空行拆分记录。 q||符号引用管道中的内容,因此q||''相同。您可以使用q前缀的各种分隔符:q(), q//也是相同的。

答案 1 :(得分:3)

local $/ = q||; 

这会将空行视为“记录分隔符”。

local $/ = q||;
    while(<$fh>) {
        # each loop, $_ will be a different record
        # the first will be "First block\nFirst Line: Something in here\nSecond Line: More here\nThird Line: etc.\n\n"
        # etc.
      }

答案 2 :(得分:3)

local $/ = q||;local $/ = '';

相同

检查Quote and Quote-like Operators

local会暂时使用dynamic scope设置全局变量$/input record separator)来清空字符串,因此输入记录会被一个或更多空行。