gio*_*ano 3 testing perl operators
我有这个来自Perl Cookbook 的简单代码,它递归地打印所有目录和文件:
use File::Find;
@ARGV = qw(.) unless @ARGV;
find sub { print $File::Find::name, -d && '/', "\n" }, @ARGV;
Run Code Online (Sandbox Code Playgroud)
我不明白print $File::Find::name, -d. 这要怎么解释?如果-d测试 if$File::Find::name是一个目录,那么-d函数的参数也是print?或者 Perl 是否明确地将独立 解释-d为if -d?
不,这-d是一个独立的声明,它测试$_. 所以本质上等同于
-d $_ && '/'
Run Code Online (Sandbox Code Playgroud)
上面写着“如果文件是一个目录,则返回一个斜杠字符(打印)”。所述sub码块由所使用的find从功能File::Find,其中$_包含了当前文件的文件名称。
逗号,分隔为语句返回字符串的print语句列表:
print $File::Find::name, # print the files name
-d && '/', # if it is a dir, print /
"\n" # print a newline
Run Code Online (Sandbox Code Playgroud)
在文档的-d(包含在用于perldoc代码-X,所有的文件测试中列出)状态:
If the argument is omitted, tests $_ ...
Run Code Online (Sandbox Code Playgroud)
这适用于-X.
&&可以这样使用的原因是它比逗号运算符具有更高的优先级,。这在perldoc perlop 中有记录
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |