尝试使用 read(2) 从指定的 FILEHANDLE 中读取 LENGTH 字节的数据到变量 SCALAR。它绕过任何 PerlIO 层,包括缓冲 IO(但受 :utf8
层的存在影响,如后所述),因此将此与其他类型的读取、print
、write
、seek
、tell
或 eof
混合使用会导致混乱,因为 :perlio
或 :crlf
层通常会缓冲数据。返回实际读取的字节数,文件末尾为 0
,或在发生错误时返回 undef(在这种情况下,$!
也会被设置)。SCALAR 将被扩展或缩小,以便最后实际读取的字节是读取后标量中的最后一个字节。
可以指定一个 OFFSET,将读取的数据放置在字符串的开头以外的位置。负 OFFSET 指定从字符串末尾开始向后计数的字符数。大于 SCALAR 长度的正 OFFSET 将导致字符串用 "\0"
字节填充到所需大小,然后附加读取结果。
没有 syseof() 函数,这没关系,因为 eof
在设备文件(如 tty)上效果不佳。使用 sysread
并检查返回值是否为 0 来确定是否已完成。
请注意,如果文件句柄已标记为 :utf8
,sysread
将抛出异常。:encoding(...)
层隐式地引入了 :utf8
层。请参阅 binmode
、open
和 open 编译指示。