3

私はPerlが初めてで、それを学んでいます。bashが提供するように、タブによる単語の自動補完を提供するスクリプトを作成します。入力が定義された配列にない場合は、定義済みのメッセージを出力し、入力が配列にある場合は、同じものに対してシステム コマンドを実行します。

私の仮定では問題なく動作しますが、 [ 文字のみを入力するとエラーが発生し、なぜそれが発生するのかわかりません。

もう1つ、文字なしでタブのみを入力すると、配列に定義済みのコマンドが表示されず、プロンプトのみが表示されるとします。

親切に私を導き、間違っている場合は修正してください。

実行時にデバッグするための -x オプションがあるという点で bash シェル スクリプトを使用する前に、それを行うための Perl のオプションはありますか?

私のスクリプト:

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

[ を入力するとエラー :

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 ベン

4

2 に答える 2

10

[は正規表現の特殊文字です。エスケープする必要があります。

ユーザーからの入力を読み取り、そのまま検索したい場合は、 and を使用でき\Qます\E

/\Q$in\E/
于 2012-10-03T06:37:51.847 に答える
1

リテラルとして挿入したい場合は、バックスラッシュ ( )[でエスケープする必要があります\

そうでなければ、それは特別な意味を持っていますregular expressions

于 2012-10-03T06:37:34.640 に答える