telldir

ディレクトリハンドルの現在のシークポインタを取得する

構文

解説

telldir は、DIRHANDLE 上での readdir ルーチンの現在位置を返します。 現在位置の値は、seekdir に与えることで、そのディレクトリの読み取り位置を変更することができます。

次のコードは、opendir でディレクトリを開いた直後の現在位置、そして、 readdir によって得られたファイル名と、その時点の現在位置を出力します。

opendir my $dh, './sample';
print telldir($dh), "\n";

while ( my $file = readdir $dh ) {
    print $file, "\n";
    print telldir($dh), "\n";
}

上記コードを Ubuntu などの Linux 環境で実行すると、次のような結果が出力されます。

0
.
1
..
2
test1.txt
3
test2.txt
4

この結果を見ての通り、telldir は 0 から順に読み取ったエントリの数だけ位置が増えていきます。

一方で、同じコードを Windows で実行すると、次のような結果が出力されます。

0
.
2
..
5
test1.txt
15
test2.txt
-1

Windows では現在位置が 0 から始める点は Linux と同じですが、ディレクトリ内のエントリを読み取っても 1 ずつ増えていくわけではありません。 さらに、読み取りが終わると、その位置は -1 になってしまいます。 このように、telldir から得られる現在位置の値は、環境によって異なりますので注意が必要です。