3

我是 Perl 的新手,正在学习它。我编写了一个脚本,它通过 bash 提供的选项卡提供单词自动完成功能。如果输入不在定义的数组中,它会打印预定义的消息,如果输入在数组中,那么它会运行相同的系统命令。

根据我的假设,它运行良好,但如果我只输入 [ 字符,它会给出错误,我无法找到它发生的原因。

还有一件事,假设我只键入不带任何字符的制表符,它不显示数组中的预定义命令。它只提示。

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

在我使用 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本

4

2 回答 2

10

[是正则表达式中的特殊字符,您必须对其进行转义。

如果您读取用户的输入,并想按原样搜索,您可以使用\Qand \E

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

如果您想以[文字形式插入,则应使用反斜杠 ( \)对其进行转义

否则有特殊含义regular expressions

于 2012-10-03T06:37:34.640 回答