【发布时间】:2011-09-04 14:28:09
【问题描述】:
我遇到了这行代码:
if( -f <filename> ) { ... }
-f 似乎在测试文件名是否存在,但我不确定。到目前为止,谷歌搜索没有帮助(谷歌很难找到“-f”),我的 Perl 书籍也没有。
谁能给点建议?
【问题讨论】:
-
-f选项相当奇怪。存在的测试是-e,但-f是“普通文件”,似乎被定义为“不特殊”。它不是二进制的,因为在我的测试中,-B和-f的文件都返回 true。 -
这里要吸取的教训不是依赖一般的 Google 结果。 Restrict to the domain
perl.org:第二个结果就是你想要的。 – 如果不提及-f,您的书会非常糟糕。最好得到这些:p3rl.org/book> books.perl.org> 还有一些关于 Stack Overflow 的好建议,搜索标签[perl][books]。 -
-f只不过是那句熟悉的老歌(statbuf.st_mode & S_IFMT) == S_IFREG的语法糖。这里的实际问题是<filename>是什么,这更有趣。 -
假设您没有重载所有
-X前缀一元运算符(要么全部重载,要么都不重载),并且还假设您没有重载<>circumfix 迭代运算符, 然后<filename>将执行scalar readline(*filename)— 这取决于$/的值 — 然后将该结果传递回 filetest 运算符。 If 也会对<$filename>执行此操作,但现在$filename是一个间接句柄,而不是像filename这样的直接句柄。但是,如果filename不是合法标识符,则使用该参数调用File::Glob::bsd_glob函数。