您可以使用File :: Slurp模块一步完成。
use File::Slurp;
$all_of_it = read_file($filename); # entire file in scalar
@all_lines = read_file($filename); # one line per element
Perl惯用的处理文件中所有行的方法是一次执行一行:
open (INPUT, $file) || die "can't open $file: $!";
while () {
chomp;
# do something with $_
}
close(INPUT) || die "can't close $file: $!";
这比将整个文件作为一行行读取到内存中,然后一次处理一个元素要有效得多,这通常是(即使并非总是如此)错误的方法。每当您看到有人这样做时:
@lines = ;
您应该认真思考为什么需要一次加载所有内容。这不是一个可扩展的解决方案。您可能还会发现使用标准的Tie :: File模块或DB_File模块的$ DB_RECNO绑定会更有趣,这允许您将数组绑定到文件,以便访问数组中的元素实际上是访问文件中的相应行。 。
您可以将整个文件句柄内容读入标量。
{
local(*INPUT, $/);
open (INPUT, $file) || die "can't open $file: $!";
$var = ;
}
这会暂时取消记录分隔符的定义,并将在块退出时自动关闭文件。如果文件已经打开,请使用以下命令:
$var = do { local $/; };
对于普通文件,您还可以使用读取功能。
read( INPUT, $var, -s INPUT );
第三个参数测试INPUT文件句柄上数据的字节大小,并将那么多字节读入缓冲区$ var。