7

この質問の動作を調べたところ、perllstat()が glob パターンに一致するすべてのパスであることに驚きました。

$ mkdir dir
$ touch dir/{foo,bar,baz}.txt  
$ strace -e trace=lstat perl -E 'say $^V; <dir/b*>' 
v5.10.1
lstat("dir/baz.txt", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
lstat("dir/bar.txt", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0

Linux システムでglob(pattern)と を使用<pattern>し、それ以降のバージョンの perl を使用しても同じ動作が見られます。

私の予想では、グロビングはフードの下で単純に opendir/readdir を実行し、検索している実際のパス名を検査する必要はありませんでした。

これの目的は何lstatですか?glob() の戻り値に影響しますか?

4

2 に答える 2

8

この奇妙な動作は、以前に PerlMonks で指摘されていました。そのフラグをサポートするためのglob呼び出しが判明しました。これには次のような効果があります。lstatGLOB_MARK

パターンに一致するディレクトリである各パス名には、スラッシュが追加されています。

ディレクトリエントリがサブディレクトリを参照しているかどうかを調べるには、それが必要ですstat。これは、フラグが指定されていない場合でも行われるようです。

于 2013-05-09T13:04:46.230 に答える