получаю странную ошибку с регулярным выражением '[

StackOverflow https://stackoverflow.com//questions/12703055

  •  13-12-2019
  •  | 
  •  

Вопрос

Я новичок в 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top