Frage

Ich bin neu in Perl und lerne es.Ich schreibe ein Skript, das die automatische Wortvervollständigung per Tabulator ermöglicht, wie es Bash vorsieht.Befindet sich die Eingabe nicht im definierten Array, wird eine vordefinierte Meldung gedruckt. Befindet sich die Eingabe im Array, wird der entsprechende Systembefehl ausgeführt.

Nach meinen Annahmen läuft es gut, aber wenn ich nur [ Zeichen eingebe, werden Fehler angezeigt, die ich nicht finden kann, weshalb es passiert.

Noch etwas: Nehmen wir an, ich gebe nur die Tabulatortaste ohne Zeichen ein, es werden keine vordefinierten Befehle im Array angezeigt, sondern nur eine Eingabeaufforderung.

Bitte leiten Sie mich, und wenn ich falsch liege, korrigieren Sie mich bitte.

Bevor ich Bash-Shell-Skripte verwende, in denen wir die Option -x zum Debuggen während der Laufzeit haben, gibt es in Perl eine Option, dies zu tun?

mein Skript:

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

Fehler, wenn ich [ eingebe:

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

War es hilfreich?

Lösung

[ ist ein Sonderzeichen in Regex, Sie müssen es maskieren.

Wenn Sie die Eingaben des Benutzers lesen und unverändert suchen möchten, können Sie Folgendes verwenden \Q Und \E:

/\Q$in\E/

Andere Tipps

wenn Sie gerne einfügen [ Als Literal sollten Sie es mit einem Backslash () maskieren.\)

Ansonsten hat es eine besondere Bedeutung regular expressions

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top