我是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 本
答案 0 :(得分:10)
[
是正则表达式中的一个特殊字符,你必须逃脱它。
如果您阅读了用户的输入,并希望按原样搜索,则可以使用\Q
和\E
:
/\Q$in\E/
答案 1 :(得分:1)
如果您想以文字形式插入[
,则应使用反斜杠(\
)将其转义
否则它在regular expressions