-d:不匹配我的文件夹

Whi*_*ite 0 directory perl exists

我有这个代码的问题.它匹配目录.,..但不匹配其他目录.你能解释一下为什么吗?

my $Checked_directory = $Tested_directory . '\Sources';

opendir(Checked_directory, $Checked_directory)
    or print STDOUT "\n 101 - Cant open $Checked_directory: $!\n";

@files = readdir(Checked_directory);    #etablished the list of file in the checked folder

foreach my $fileToTest (@files) {

  print $fileToTest . "\n";    #debug

  if ($fileToTest =~ m/.jpg$/) {
    print 'file...  ' . $fileToTest . "\n";
    $Localisation_file = $Tested_directory . '\Sources\\' . $fileToTest;    #file to test
  }
  elsif (-d $fileToTest) {
    print ">>>>" . $fileToTest . "\n";
  }
}

closedir(Checked_directory);
Run Code Online (Sandbox Code Playgroud)

Bor*_*din 6

@files您似乎知道,其中的名称没有任何路径信息,这意味着-d在当前工作目录中查找它们无法找到它们,并且报告错误.-e(存在)测试也会发生同样的情况.

你应该改变你的代码.请注意,以大写字母开头的标识符是为全局标识符保留的.使用裸字文件和目录句柄也是一个坏主意 - 词法句柄是当前的最佳实践.

my $checked_directory = "$tested_directory\\Sources";

opendir $checked_dh, $checked_directory
    or print STDOUT "\n 101 - Cant open $checked_directory: $!\n";

while (my $file_to_test = readdir $checked_dh) {

  print "$file_to_test\n";

  my $localisation_file = "$tested_directory\\Sources\\$file_to_test";

  if (-d $localisation_file) {
    print ">>>> $file_to_test\n";
  }
  elsif ($file_to_test =~ /\.jpg$/) {
    print "file... $file_to_test\n";
  }
}

closedir $checked_dh;
Run Code Online (Sandbox Code Playgroud)