这个问题在这里已有答案:
以下代码中的-d
是什么:
foreach my $filename (@files) {
my $filepath = $dir.$filename;
next if -d $filepath;
function1();
}
这是一个简短的表格
if (-d $filepath) {
next;
}
如果-d $filepath
是一个目录,那么$filepath
就是一个测试。
有关文件测试的完整列表,请参阅http://perldoc.perl.org/functions/-X.html。
-d
测试$filepath
是否是目录。
所有这些文件测试都记录在perldoc -X
:
-X FILEHANDLE
-X EXPR
-X DIRHANDLE
-X
文件测试,其中X是下面列出的字母之一。这个一元运算符接受一个参数,可以是文件名,文件句柄或dirhandle,并测试相关文件以查看是否有关于它的事情。如果省略该参数,则测试$_
,-t
除外,它测试STDIN。除非另有说明,否则返回1
为true,''
为false。如果文件不存在或无法检查,则返回undef
并设置$!
(errno)。尽管有趣的名称,优先级与任何其他命名的一元运算符相同。运营商可以是以下任何一个:... -f File is a plain file. -d File is a directory. ...
它检查目录......
一个简短的例子来检查
$somedir = "c:/windows";
if (-d $somedir) {
print "$somedir exists";
} else {
print "$somedir does not exist!";
}
另请查看docs以了解其他此类情况
-f File is a plain file.
-d File is a directory.
-l File is a symbolic link.
-p File is a named pipe (FIFO), or Filehandle is a pipe.
-S File is a socket.
-b File is a block special file.
-c File is a character special file.
-t Filehandle is opened to a tty.
本质上,next if -d $filepath;
的意思是“如果这个文件是一个目录,则运行循环的下一次迭代”,这有效地跳过了该文件的function1调用。简而言之,它是一种仅将function1应用于非目录文件的方法。