ファイルハンドルのシークポインタの位置を取得する
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 はバッファリングを通して処理しますが、これらの関数はそうではないからです。