ファイルハンドルのシークポインタの位置を取得する
tell
は、ファイルハンドル FILEHANDLE のシークポインタの位置をバイトで返します。
失敗すると -1 を返します。FILEHANDLE を省略すると、最後に読み取ったファイルを適用します
(ただし close
でファイルを閉じた後ではエラーになります)。
open my $fh, '<', './sample.txt';
print tell($fh), "\n"; # 0
seek $fh, 3, 0;
print tell($fh), "\n"; # 3
print tell, "\n"; # 3
tell
は、seek
や sysseek
と同様に、たとえファイルを :encoding(UTF-8)
を使って utf8 モードで開いたとしても、
ポインタ位置の単位は文字数ではなくバイト数ですので注意してください。
なお、Perl に systell
関数は用意されていません。代わりに
sysseek($fh, 0, 1)
を使ってください。
sysread
, syswrite
,
sysseek
を使ってファイルハンドルを操作する場合、
tell
は使わないでください。
tell
はバッファリングを通して処理しますが、これらの関数はそうではないからです。