sysseek FILEHANDLE,POSITION,WHENCE

使用 lseek(2) 設定 FILEHANDLE 的系統位置(以位元組為單位)。FILEHANDLE 可以是一個表達式,其值提供檔案代號的名稱。WHENCE 的值為 0,將新位置設定為 POSITION;1,將其設定為目前位置加上 POSITION;2,將其設定為 EOF 加上 POSITION,通常為負值。

請注意強調位元組:即使檔案代號已設定為以字元操作(例如使用 :encoding(UTF-8) I/O 層),seektellsysseek 函式系列使用位元組偏移,而不是字元偏移,因為在 UTF-8 檔案中尋找字元偏移會非常慢。

sysseek 繞過正常的緩衝 I/O,因此將其與 sysread 以外的讀取(例如 readlineread)、printwriteseektelleof)混合使用可能會造成混淆。

對於 WHENCE,您也可以使用 Fcntl 模組中的常數 SEEK_SETSEEK_CURSEEK_END(檔案開頭、目前位置、檔案結尾)。使用常數比依賴 0、1 和 2 更具可移植性。例如,要定義一個「systell」函式

use Fcntl 'SEEK_CUR';
sub systell { sysseek($_[0], 0, SEEK_CUR) }

傳回新位置,或在失敗時傳回未定義值。零的位置會傳回字串 "0 but true";因此 sysseek 在成功時傳回 true,在失敗時傳回 false,但您仍然可以輕鬆地判斷新位置。