我有这个代码读取一个文件然后打印另一个文件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;
};
答案 0 :(得分:1)
$/
是记录分隔符,用于在while
循环中一次读取文件的位。默认情况下它是新行&#39;。
然而,在全球范围内更改它是一种糟糕的形式,因为它可能会破坏程序的其他部分。
local
通过将更改范围限定为当前范围(实际上是这组{}
&#39;)来避免此问题。默认情况下 - 当您以这种方式local
ize时,它会将值设置为undef
。这意味着您可以一次性阅读整个文件。
所以这意味着 - 将$fh
中的所有内容读入$data
,但不要在全局范围内混淆$/
。