получаю странную ошибку с регулярным выражением '[
Вопрос
Я новичок в Perl и изучаю его.Я пишу скрипт, который обеспечивает автоматическое завершение слов по вкладке, как это обеспечивает bash.Если входные данные не находятся в определенном массиве, он печатает предопределенное сообщение, а если входные данные находятся в массиве, для этого запускается системная команда.
Согласно моим предположениям, он работает нормально, но если я ввожу только символ [, он выдает ошибки, которые я не могу найти, поэтому это происходит.
Еще одна вещь: предположим, я набираю только табуляцию без каких-либо символов, она не показывает предопределенные команды в массиве. Это только подсказка.
Пожалуйста, подскажите мне, и если я ошибаюсь, пожалуйста, поправьте меня.
Прежде чем я буду использовать сценарии оболочки bash, в которых у нас есть опция -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 Ben
Решение
[
- это специальный символ Regex, вы должны избежать его.
Если вы прочитаете вход от пользователя, и хотите поискать как есть, вы можете использовать \Q
и \E
:
/\Q$in\E/
. Другие советы
если хочешь вставить [
в буквальном смысле вам следует экранировать его обратной косой чертой (\
)
В противном случае это имеет особое значение в regular expressions