Perl:无条件文件测试运算符

我有这个来自Perl Cookbook 的简单代码,它递归地打印所有目录和文件:

use File::Find;

@ARGV = qw(.) unless @ARGV;
find sub { print $File::Find::name, -d && '/', "n" }, @ARGV;

我不明白print $File::Find::name, -d. 这要怎么解释?如果-d测试 if$File::Find::name是一个目录,那么-d函数的参数也是print?或者 Perl 是否明确地将独立 解释-dif -d

回答

不,这-d是一个独立的声明,它测试$_. 所以本质上等同于

-d $_ && '/'

上面写着“如果文件是一个目录,则返回一个斜杠字符(打印)”。所述sub码块由所使用的find从功能File::Find,其中$_包含了当前文件的文件名称。

逗号,分隔为语句返回字符串的print语句列表:

print $File::Find::name,   # print the files name
-d && '/',                 # if it is a dir, print /
"n"                       # print a newline

在文档的-d(包含在用于perldoc代码-X,所有的文件测试中列出)状态:

If the argument is omitted, tests $_ ...

这适用于-X.

&&可以这样使用的原因是它比逗号运算符具有更高的优先级,。这在perldoc perlop 中有记录


以上是Perl:无条件文件测试运算符的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>