为什么我们必须在代码中本地化$ /?

时间:2015-03-14 12:04:09

标签: perl

我有这个代码读取一个文件然后打印另一个文件output1.txt中下一行空格分隔的每个字符串。我想知道的是,如果我删除$ /,它只需要uart1.txt的第一行。什么是本地做的和最终文件句柄在$ data中返回?我有什么办法可以完成这项任务吗?

#!/usr/local/bin/perl

open STDOUT, ">", "output1.txt" or die "$0: open: $!";

use strict; 
use warnings;

my $data= do {
open my $fh , '<','D:\perl_learning\uart1.txt' or die $!;
 local $/;
<$fh>;
};

while($data =~ /(\S+)/g)
{
my $word=$1;
printf"%s\n",$word; 
};    

1 个答案:

答案 0 :(得分:1)

$/是记录分隔符,用于在while循环中一次读取文件的位。默认情况下它是新行&#39;。

然而,在全球范围内更改它是一种糟糕的形式,因为它可能会破坏程序的其他部分。

local通过将更改范围限定为当前范围(实际上是这组{}&#39;)来避免此问题。默认情况下 - 当您以这种方式local ize时,它会将值设置为undef。这意味着您可以一次性阅读整个文件。

所以这意味着 - 将$fh中的所有内容读入$data,但不要在全局范围内混淆$/