正则表达式出现奇怪错误[

Ben*_*Ben 3 regex perl quoting

我是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";
    }
}
Run Code Online (Sandbox Code Playgroud)

错误,如果我输入[:

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.
Run Code Online (Sandbox Code Playgroud)

BR Ben

J-1*_*DiZ 10

[ 在正则表达式中是一个特殊的角色,你必须逃脱它.

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

/\Q$in\E/
Run Code Online (Sandbox Code Playgroud)