在这个问题中查看行为,我很惊讶地看到perl lstat()的每个路径都与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
Run Code Online (Sandbox Code Playgroud)
我看到我的Linux系统上相同的行为glob(pattern)和<pattern>,和更高版本的Perl.
我的期望是,globbing只是opendir/readdir,并且它不需要检查它正在搜索的实际路径名.
这是什么目的lstat?它会影响glob()的返回吗?
之前在PerlMonks上已经注意到这种奇怪的行为.事实证明,glob调用lstat支持其GLOB_MARK标志,其效果是:
作为与模式匹配的目录的每个路径名都附加了一个斜杠.
要确定目录条目是否引用了子目录,您需要stat它.即使没有给出标志,这显然已经完成.
| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |