在Perl脚本中使用`-d`有什么用?

时间:2014-09-10 17:04:40

标签: perl

以下代码中的-d是什么:

foreach my $filename (@files) {
        my $filepath = $dir.$filename;
        next if -d $filepath;
        function1();
}

4 个答案:

答案 0 :(得分:4)

-d测试$filepath是否为目录。

所有此类文件测试都记录在perldoc -X

  
      
  • -X FILEHANDLE
  •   
  • -X EXPR
  •   
  • -X DIRHANDLE
  •   
  • -X

         

    文件测试,其中X是下面列出的字母之一。这个一元运算符接受一个参数,可以是文件名,文件句柄或dirhandle,并测试相关文件以查看是否有关于它的内容。如果省略该参数,则测试$_,但-t除外,它测试STDIN。除非另有说明,否则返回1表示true,''表示false。如果文件不存在或无法检查,则返回undef并设置$!(错误)。尽管有趣的名称,优先级与任何其他命名的一元运算符相同。运营商可以是以下任何一个:

    ...
    -f  File is a plain file.
    -d  File is a directory.
    ...
    
  •   

答案 1 :(得分:3)

这是

的简短形式
if (-d $filepath) {
    next;
}

如果-d $filepath是目录,则$filepath是测试。

有关文件测试的完整列表,请参阅http://perldoc.perl.org/functions/-X.html

答案 2 :(得分:2)

它检查目录......

检查

的简短示例
$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.

答案 3 :(得分:1)

基本上,next if -d $filepath;表示“如果此文件是目录,则运行循环的下一次迭代”,这有效地会跳过对该文件的 function1 的调用。简而言之,这是一种仅将 function1 应用于非目录文件的方法。