Question

Je suis nouveau avec Perl et je l'apprends.J'écris un script qui permet la saisie semi-automatique des mots par tabulation, comme le propose bash.Si l'entrée n'est pas dans un tableau défini, il imprime un message prédéfini et si l'entrée est dans un tableau, il exécute la commande système pour le même.

Cela fonctionne bien selon mes hypothèses, mais si je saisis uniquement le caractère [, cela donne des erreurs que je ne trouve pas, c'est pourquoi cela se produit.

Encore une chose, supposons que je tape uniquement une tabulation sans aucun caractère, il n'affiche pas les commandes prédéfinies dans le tableau, il ne fait qu'inviter.

Veuillez me guider et si je me trompe, corrigez-moi.

Avant d'utiliser des scripts shell bash dans la mesure où nous avons l'option -x pour déboguer pendant l'exécution, existe-t-il une option avec Perl pour le faire ?

mon scénario :

 #!/usr/bin/perl

 use Term::Complete;
 use List::Util 'first';

 @cmd = qw/ls uptime clear/;
 while (defined @cmd) {

     $in = Complete('prompt', @cmd);
     if (first { /$in/ } @cmd) {

         system($in);
     }
     elsif ($in eq 'exit') {

         `kill -9 $$`;
     }
     else {

         print "Use these commands: ls uptime clear";
    }
}

Erreur, si je saisis [ :

perl tab1.pl 
prompt uptime
12:02:31 up  3:29,  2 users,  load average: 0.00, 0.00, 0.00
prompt [
Unmatched [ in regex; marked by <-- HERE in m/[ <-- HERE / at tab1.pl line 8.

BR Ben

Était-ce utile?

La solution

[ est un caractère spécial dans regex, vous devez y échapper.

Si vous lisez l'entrée de l'utilisateur et souhaitez effectuer une recherche telle quelle, vous pouvez utiliser \Q et \E:

/\Q$in\E/

Autres conseils

si vous aimez insérer [ comme littéral, vous devez y échapper avec une barre oblique inverse (\)

Sinon, cela a une signification particulière dans regular expressions

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top