我是Perl的新手并学习它。我写了一个脚本,它通过tab提供word自动完成,就像bash提供的那样。如果输入不在定义的数组中,它会打印预定义的消息,如果输入在数组中,则运行相同的系统命令。

它按照我的假设运行良好,但如果我只输入[character,它会给出错误,我找不到它发生的原因。

还有一件事,假设,我只键入tab没有任何字符,它不显示预定义的命令array.It 只有提示。

请指导我,如果我错了,请纠正我。

在我使用bash shell脚本之前,我们有-x选项在运行时进行调试,是否有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 本

有帮助吗?

解决方案

[ 是正则表达式中的特殊字符,你必须转义它。

如果您从用户读取输入,并希望按原样搜索,则可以使用 \Q\E:

/\Q$in\E/

其他提示

如果你喜欢插入 [ 作为字面意思,你应该用反斜杠(\)

否则,它在 regular expressions

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top