关于read
:
read
支持PerlIO层。read
适用于任何Perl文件句柄[1]。read
缓冲。read
以固定大小的8 KiB块[2]从系统获取数据。read
可能会阻止[3]。关于sysread
:
sysread
不支持PerlIO层(意味着它需要原始的a.k.a.二进制句柄)。sysread
仅适用于映射到系统文件句柄/描述符的Perl文件句柄[4]。sysread
没有缓冲。sysread
执行单个系统调用。sysread
会立即返回,即使数据量小于请求的数量。总结和结论:
read
适用于任何Perl文件句柄,而sysread
仅限于映射到系统文件句柄/描述符的Perl文件句柄。read
与select
不相容[5],而sysread
与select
兼容。read
可以为您执行解码,而sysread
则要求您进行自己的解码。read
应该更快,而对于非常大的读取,sysread
应该更快。笔记:
open(my $fh, '<', \$var)
创建的句柄。perl
时,可以配置块的大小,默认值为8 KiB。read
将准确返回所请求的数量(如果可能),但从管道读取时可能返回较少。这些结果无法保证。fileno
为这些返回一个非负数。例如,这些包括从普通文件,管道和套接字读取的句柄,但不包括[1]中提到的句柄。