tell

ファイルハンドルのシークポインタの位置を取得する

構文

解説

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 は、seeksysseek と同様に、たとえファイルを :encoding(UTF-8) を使って utf8 モードで開いたとしても、 ポインタ位置の単位は文字数ではなくバイト数ですので注意してください。

なお、Perl に systell 関数は用意されていません。代わりに sysseek($fh, 0, 1) を使ってください。

sysread, syswrite, sysseek を使ってファイルハンドルを操作する場合、 tell は使わないでください。 tell はバッファリングを通して処理しますが、これらの関数はそうではないからです。