为什么我的Perl单行报告“Bareword发现了运营商的预期”?

时间:2010-10-13 13:08:58

标签: regex perl string-formatting syntax-error

我想将块大小转换为MB。我在替换中使用了/e选项。当我在替换部分添加起始MB时,它会给我错误。

e.g:

这很有效。

 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 个答案:

答案 0 :(得分:6)

更改

(1024*1024*2) MB $2

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

/e修饰符告诉引擎将替换字段视为Perl代码。

答案 1 :(得分:3)

/e开关将replace表达式转换为常规perl表达式。您需要引用' MB'并使用连接(.)。

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

应该工作。