2014-09-10 4 views
0

Что делает -d в следующем фрагменте кода:Что такое `-d` в скрипте Perl?

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

Если вы установили 'perldoc', то наберите' perldoc -f function' покажет вам документацию для 'function', например. 'perldoc -f -d' переносит вас в документацию для [функций проверки файлов] (http://perldoc.perl.org/functions/-X.html). – ThisSuitIsBlackNot

+3

'perldoc -f -d' – hobbs

ответ

3

Это короткая форма для

if (-d $filepath) { 
    next; 
} 

Где -d $filepath тест, если $filepath является каталогом.

См. http://perldoc.perl.org/functions/-X.html для получения полного списка проверок файлов.

4

-d тесты, если $filepath является каталогом.

Все такие тесты файлов документированы в perldoc -X:

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

    тест-файл, где Х представляет собой один из букв перечислено ниже. Этот унарный оператор принимает один аргумент, либо имя файла, дескриптор файла, либо dirhandle, и проверяет связанный файл, чтобы убедиться, что с ним что-то истинно. Если аргумент опущен, тесты $_, за исключением -t, который проверяет STDIN. Если не указано иное, он возвращает 1 для true и '' для false. Если файл не существует или не может быть проверен, он возвращает undef и устанавливает $! (errno). Несмотря на смешные имена, приоритет такой же, как и любой другой унарный оператор. Оператор может быть любой:

    ... 
    -f File is a plain file. 
    -d File is a directory. 
    ... 
    
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. 
1

По существу, next if -d $filepath; означает «если этот файл является каталогом, выполните следующую итерацию цикла», что фактически пропускает вызов function1 для этого файла. Короче говоря, это способ применения function1 только в файлы, которые НЕ являются каталогами.

Смежные вопросы