Почему мой Perl однострочный отчет "Bareword найден там, где ожидал оператор"? - PullRequest
0 голосов
/ 13 октября 2010

Я хочу конвертировать размер блока в МБ.Я использую опцию /e в моей замене.Когда я добавляю начальный МБ в замещающую часть, это дает мне ошибку.

Например:

Это работает.

 echo "16777216 SELECT" |perl -lane 's#(\d+)(\s+SELECT)#$1/(1024*1024*2)#e; print'
8

Это дает мне ошибку.

echo "16777216 SELECT" |perl -lane 's#(\d+)(\s+SELECT)#$1/(1024*1024*2) MB $2#e; print'
Bareword found where operator expected at -e line 1, near ") MB"
        (Missing operator before MB?)
syntax error at -e line 1, near ") MB "
Execution of -e aborted due to compilation errors.

Можно ли исправить второй?

Ответы [ 2 ]

6 голосов
/ 13 октября 2010

Изменение

(1024*1024*2) MB $2

до

(1024*1024*2)."MB".$2

Модификатор /e указывает движку обрабатывать поле подстановки как код Perl.

3 голосов
/ 13 октября 2010

Переключатель /e превращает выражение замены в регулярное выражение perl. Вам нужно заключить в кавычки ' MB' и использовать конкатенацию (.).

's#(\d+)(\s+SELECT)#$1/(1024*1024*2) . q[ MB] . $2#e

Должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...