我在让-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...");
}
答案 0 :(得分:5)
-e
和-d
不受任何变量的影响,但如果您没有指定完整路径,则它们会相对于当前工作目录进行检查。代码可能是从不同的位置启动,也可能是更改自身的目录。