哪些全局变量会影响Perl中的-e,-d文件测试运算符?

时间:2009-07-01 19:00:38

标签: perl

我在让-e和-d文件测试运算符可靠地工作时遇到问题。

清单1和清单2位于NTFS Windows XP SP 3系统的同一目录中。但是,清单2坚持存在一个目录(它没有),清单1使它正确。清单2是主程序的一部分。

另外,有趣的是,我的记录器例程拒绝创建/写入文件,即使我使用or croak语句进行打开和打印也是如此。我怀疑这两个是连接的。我将其列为清单3。

我的观点是Perl的全局变量在某处被取消/设置并且我设法炒掉了它们(虽然我试图非常小心)。

谢谢!

清单1:

use strict;
use warnings;

my $dir = "somedir2";

my $result= (-e $dir);

if( ! (-e $dir))
{
     print "$dir doesn't exist\n";
}
else 
{
     print "$dir exists\n";
}

#print "$result\n";


if(! (-d $dir))
{
     print "$dir isn't a dir!\n";
}
else
{
     print "$dir is a dir\n";
}

清单2:

#Does the output directory not exist?
    open_logger("logfile.txt");
    logger("initializing logfile.");
    logger("Checking $outputdir for existence...");
   if( ! ( -e $outputdir))
   {
         logger("$outputdir doesn't exist...creating");
      #if so, then create it
      if( ! mkdir($outputdir))
      {
         $result = "Could not create $outputdir: $!";
            logger("Could not create $outputdir: $!");
         return ($success, $result);
      }
         logger("Created $outputdir");
   }
    else
    {
         logger("$outputdir exists...");
    }

   #is the directory not a directory? then die - something's off.
   if( ! ( -d $outputdir))
   {
      $result = "Failure: output directory $outputdir not a directory!\n";
        logger("$outputdir isn't a directory");
      return ($success, $result);
   }

清单3:

     my $fh_logger_package;
sub open_logger
{
     my $filename = shift;
     open(FILE, ">$filename") or croak("Could not init logfile: $!");
     $fh_logger_package = \*FILE;
     print STDERR "Opened $filename\n";
     if( ! (-e $filename))
     {
          croak("Crikey! Did not create file!");
     }
}
sub logger
{
     my $message = shift;

     print STDERR $message . "\n";
     print $fh_logger_package $message . "\n" or croak("Could not print to filehandle...");
}

1 个答案:

答案 0 :(得分:5)

-e-d不受任何变量的影响,但如果您没有指定完整路径,则它们会相对于当前工作目录进行检查。代码可能是从不同的位置启动,也可能是更改自身的目录。