Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
538 views
in Technique[技术] by (71.8m points)

regex - Why does my Perl one-liner report "Bareword found where operator expected"?

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...