Why does my Perl one-liner report “Bareword found where operator expected”?

天大地大妈咪最大 提交于 2020-01-17 06:08:47

问题


I want to convert block size into MB. I am using the /e option in my substitution. When I add starting MB in substitution part it giving me the error.

e.g:

This works.

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

This giving me the error.

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.

Any help fixing the second one?


回答1:


The /e switch turns the replace expression into a regular perl expression. You need to quote the ' MB' and use concatenation (.) .

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

Should work.




回答2:


Change

(1024*1024*2) MB $2

to

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

The /e modifier tells the engine to treat the substitution field as Perl code.



来源:https://stackoverflow.com/questions/3923967/why-does-my-perl-one-liner-report-bareword-found-where-operator-expected

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!