質問
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
所属していません StackOverflow