2009-07-01 68 views
0

我有問題讓-e和-d文件測試運算符可靠地工作。什麼全局變量影響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..."); 
} 

回答

5

-e-d不受任何變量,但如果你不指定完整路徑,然後檢查相對於當前工作目錄。代碼可能是從不同的位置啓動,或者更改它自身的目錄。