質問

Perlとそれを学ぶことで新しいです。Bashが提供するようにタブで単語の自動完了を提供するスクリプトを書きます。入力が定義されていない場合は、定義済みのメッセージを印刷し、入力が配列内にある場合はシステムコマンドを同じに実行します。

私の仮定に従って罰金を鳴らすが、私が入力した場合は[文字が発生するのは誤りを与えることができます。

もう1つのこと、私が文字なしでのみタブのみを入力すると、array.itのみのプロンプトでは事前定義されたコマンドが表示されません。

私を親切に案内し、私が間違っているならば、私を修正してください。

実行時にデバッグするように-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.
.

ベン

役に立ちましたか?

解決

[は正規表現の特殊文字で、脱出する必要があります。

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

/\Q$in\E/
.

他のヒント

[をリテラルとして挿入する場合は、バックスラッシュ(\

でエスケープする必要があります。

それ以外の場合は、regular expressions

で特別な意味があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top