Je rencontre des problèmes pour que les opérateurs de test de fichiers -e et -d fonctionnent de manière fiable.Quelles variables globales affectent les opérateurs de test de fichiers -e, -d dans Perl?
Les listes 1 et 2 se trouvent dans le même répertoire, sur un système NTFS Windows XP SP 3. Cependant, la liste 2 insiste sur le fait qu'un répertoire existe (ce n'est pas le cas), et le Listing 1 l'obtient correctement. La liste 2 fait partie du programme principal.
Aussi, intéressant, mon programme d'enregistrement refuse de créer/écrire dans un fichier, même lorsque je piège ouvert et j'imprime avec des instructions or croak
. Je soupçonne que les deux sont connectés. Je l'ai inclus en tant que Listing 3.
Mon opinion est que les variables globales de Perl ne sont pas définies/définies quelque part et j'ai réussi à les faire frire (bien que j'ai essayé d'être très prudent).
Merci!
Liste 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";
}
Listing 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);
}
Listing 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...");
}