Ottenere un errore strano con Regex '[
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
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