J'essaie d'écrire un script qui traiterait certains fichiers. Les données sont organisées comme ceci: il y a un dossier (appelons-le X) où mon script sera placé. Dans ce même dossier, il y a un sous-dossier appelé 'data'. Cela contient plusieurs sous-dossiers avec des noms différents et chacun d'entre eux contient de nombreux fichiers (pas d'autres sous-dossiers, juste des fichiers). J'ai besoin de traiter tous les fichiers dans un sous-dossier (plus précisément, exécuter une fonction sur chaque fichier) et fusionner les résultats pour tous les fichiers du sous-dossier, donc pour chaque dossier il y a un résultat (peu importe le nombre de fichiers). Le problème est, je ne suis pas capable d'accéder aux fichiers pour pouvoir exécuter ma fonction dessus. Ce que j'ai maintenant est ceci:Comment obtenir les contenus des répertoires imbriqués en Perl
$dirname = "data";
opendir (DIR, $dirname) || die "Error in opening dir $dirname\n";
while(($dirname2 = readdir(DIR)))
{
next if $dirname2 eq ".";
next if $dirname2 eq "..";
opendir (DIR2, $dirname2) || die "Error in opening dir $dirname2\n";
while(($file = readdir(DIR2)))
{
next if $file eq ".";
next if $file eq "..";
print("file:$file\n");
}
closedir(DIR2);
}
closedir(DIR);
Il échoue toujours avec le message "Erreur lors de l'ouverture du répertoire". 'alex' se trouve être le premier répertoire dans le répertoire de données. Ma question est: où est le problème? Est-ce même la bonne façon de réaliser ce que j'essaie de faire? Je m'inquiète aussi que ceci échoue s'il y a un dossier aussi dans le dossier de données, puisque je ne peux pas l'ouvrir avec opendir, ou je peux? PS: désolé pour cet horrible code Perl - j'essaie toujours d'apprendre cette langue.
Merci, Peter
'die "Erreur dans l'ouverture dir dirname $: $"' vous donnera la raison, voir [perldoc perlvar] (http://perldoc.perl.org/perlvar.html#%24OS_ERROR). Mieux encore, supprimez le '|| die ... 'parts, add' utilise autodie qw (: all); 'et laisse le module [autodie] (http://p3rl.org/autodie) gérer/signaler les erreurs. – daxim