Domanda

Sono nuovo con perl e impararlo.Scrivi uno script che fornisce il completamento automatico della parola in base alla scheda come fornisce Bash.Se l'input non è in array definito, stampa il messaggio predefinito e se l'ingresso è in array, quindi esegue il comando di sistema per lo stesso.

funziona bene secondo le mie ipotesi, ma se inserisco solo [carattere, dà errori che non riesco a scoprire perché succede.

Un'altra cosa, supponiamo, digito solo tab senza carattere, non mostra comandi predefiniti in array.it solo prompt.

Guida gentilmente di guidarmi e se sbaglio, per favore correggimi.

Prima di utilizzare gli script di shell bash in quanto abbiamo opzione -x da eseguire il debug durante il tempo di esecuzione, c'è qualche opzione con Perl per farlo?

Il mio script:

 #!/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";
    }
}
.

Errore, se inserisco [:

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

È stato utile?

Soluzione

[ è un personaggio speciale in regex, devi sfuggirlo.

Se leggi l'ingresso dall'utente e si desidera cercare come è possibile utilizzare \Q e \E:

/\Q$in\E/
.

Altri suggerimenti

Se ti piace inserire [ come letterale dovresti sfuggire con il backslash (\)

Altrimenti ha un significato speciale in regular expressions

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top