0
votes

Perl chdir échoue avec un motif glob

J'essaye de faire cd dans mon script perl. J'utilise la commande ci-dessous:

chdir "/home/test/test1/test2/perl*";

perl * la valeur est en fait perl_0122_2044 , mais cette valeur peut varier.

La commande chdir ci-dessus ne fait pas cd sur le chemin. Est-ce que je fais quelque chose de mal?


4 commentaires

Comment savez-vous que ce n'est pas le cas? Qu'espérez-vous qu'il se passe?


Je ne vois aucune erreur lors de la vérification. Utilisez-vous le pragma autodie ? Comment savez-vous que cela ne fonctionne pas?


Les commandes complètes sont les suivantes: chdir "/ home / test / test1 / test2 / perl *"; exec "cat test.in | grep build | awk '{print \ $ 2}'"; Après avoir exécuté le script, il affiche l'erreur: cat: test.in: aucun fichier ou répertoire de ce type


Vous devriez mettre cela dans votre question, pas dans un commentaire.


3 Réponses :


4
votes

chdir attend un chemin, pas un caractère générique. Utilisez glob pour développer le caractère générique:

my ($dir) = glob "/home/test/test1/test2/perl*";
chdir $dir or die "$dir: $!";

S'il existe plusieurs extensions, le premier sera utilisé.


0 commentaires

5
votes

chdir n'accepte pas * et autres caractères d'expansion dans l'argument. Utilisez glob ou quelque chose de similaire pour cela pour extraire un seul répertoire, puis chdir vers celui-ci. Par exemple, cela change de répertoire pour le premier / home / test / test1 / test2 / perl * qu'il trouve:

$dir = (glob "/home/test/test1/test2/perl*")[0];
# only change dir if any dir was found: 
if (-d $dir) {
    # fail if cannot change dir (or, even better, use autodie):
    chdir $dir or die "Could not change to $dir: $!";
}


2 commentaires

Et vérifiez cette erreur, principalement pour voir le répertoire qu'il a essayé: chdir $ dir or die "Impossible de changer en $ dir: $!";


@briandfoy Merci pour le rappel, ajouté ceci et une vérification supplémentaire!



0
votes

Dans le même ordre d'idées, glob est géré par un module dans raku https://modules.raku.org/dist/IO::Glob


0 commentaires