sysread FILEHANDLE,SCALAR,LENGTH,OFFSET
sysread FILEHANDLE,SCALAR,LENGTH

尝试使用 read(2) 从指定的 FILEHANDLE 中读取 LENGTH 字节的数据到变量 SCALAR。它绕过任何 PerlIO 层,包括缓冲 IO(但受 :utf8 层的存在影响,如后所述),因此将此与其他类型的读取、printwriteseektelleof 混合使用会导致混乱,因为 :perlio:crlf 层通常会缓冲数据。返回实际读取的字节数,文件末尾为 0,或在发生错误时返回 undef(在这种情况下,$! 也会被设置)。SCALAR 将被扩展或缩小,以便最后实际读取的字节是读取后标量中的最后一个字节。

可以指定一个 OFFSET,将读取的数据放置在字符串的开头以外的位置。负 OFFSET 指定从字符串末尾开始向后计数的字符数。大于 SCALAR 长度的正 OFFSET 将导致字符串用 "\0" 字节填充到所需大小,然后附加读取结果。

没有 syseof() 函数,这没关系,因为 eof 在设备文件(如 tty)上效果不佳。使用 sysread 并检查返回值是否为 0 来确定是否已完成。

请注意,如果文件句柄已标记为 :utf8sysread 将抛出异常。:encoding(...) 层隐式地引入了 :utf8 层。请参阅 binmodeopenopen 编译指示。