Performance 对在Perl中读取文件感到困惑

Performance 对在Perl中读取文件感到困惑,performance,perl,file,io,Performance,Perl,File,Io,当我想读取文件时,我使用以下代码: open my $fh, "file_path"; while(<$fh>) { # do something here } 打开我的$fh,“文件路径”; while() { #在这里做点什么 } 但如果文件很大,我担心IO性能,因为它会逐行读取磁盘 在C程序中,我们可能更喜欢一次将几个字节(例如:4096字节)读入内存(“fread”函数被调用)。这可以减少磁盘IO操作的数量,并有利于程序的性能 所以我的问题是: 在Perl中,有没

当我想读取文件时,我使用以下代码:

open my $fh, "file_path";
while(<$fh>)
{
    # do something here
}
打开我的$fh,“文件路径”;
while()
{
#在这里做点什么
}
但如果文件很大,我担心IO性能,因为它会逐行读取磁盘

在C程序中,我们可能更喜欢一次将几个字节(例如:4096字节)读入内存(“fread”函数被调用)。这可以减少磁盘IO操作的数量,并有利于程序的性能


所以我的问题是: 在Perl中,有没有办法一次从文件中读取多行或多个字节?或者Perl将封装IO详细信息,我不需要担心这一点?

是的,默认情况下IO是缓冲的,请参阅和


如果您想访问C风格的函数,可以使用
sysopen
&
sysread

当您使用
open
打开文件时,文件句柄和物理资源之间有不同的层。这些层可以是缓冲层(可以关闭输出文件句柄),也可以是PerlIO层

PerlIO层可以进行编码或行结束转换。例如,要打开UTF-8编码的文件,我们需要

use autodie; # throw fatal exception when open fails
open my $fh, "<:utf8", $filename;
使用autodie;#打开失败时引发致命异常

打开我的$fh,默认情况下,Perl中的所有I/O操作都是缓冲的缓冲可以最大限度地提高I/O操作的吞吐量。除非您需要特殊处理,否则不要处理它,因为更改默认值将降低程序的速度。

您可以阅读有关
读取
功能过早优化的文档?你试过用正常的方法吗?是不是太慢了?似乎没有人提到
$/=\4096?我很抱歉接受了另一个更详细的回答,但你的回答确实帮了我很多。非常感谢。