Perl有许多方便的成语,可以轻松地完成常见的事情,包括:
<HANDLE>
,它将无缝地打开并读取@ARGV
中的所有文件,一次仅一行:while (<>) { print $., $_; }
$/
,我可以一次“吸取”整个文件:local $/; $content = <HANDLE>;
但是,这两个习惯用法并没有像我预期的那样协同工作:重置
$/
之后,在文件末尾停止使用<>
进行混音:以下仅提供了第一个文件的内容。local $/; $content = <>;
现在,我相信这种行为一定是设计使然,但我并不在乎。将所有文件的的所有内容提取为字符串的简洁Perl惯用语是什么? (与This相关的问题提到了一种将文件列表包含到单独的字符串中的方法,这是一个开始……但如果您以后仍需要加入字符串,则不是很优雅。)
最佳答案
您意识到自己只是隐藏了多个open
调用,对不对?没有一种神奇的方式来读取多个文件,而不用一个个地打开所有文件
如您所见,如果将$/
设置为undef
,Perl将在每个文件的末尾停止读取
处理<>
的内部机制会在打开时从@ARGV
中删除每个文件名,因此我建议您只使用while
循环,该循环使用<>
进行读取,直到@ARGV
为空为止
看起来像这样
use strict;
use warnings 'all';
my $data;
{
local $/;
$data .= <> while @ARGV;
}
关于perl - 在Perl中,如何将几个文件的内容 "slurp"转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38182433/