为什么我的Perl单行报告“Bareword发现操作员期望的位置”?

我想将块大小转换为MB。我在替换中使用/e选项。当我在替换部分添加起始MB时,它会给我错误。为什么我的Perl单行报告“Bareword发现操作员期望的位置”?

例如:

这是有效的。

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.

任何帮助修复第二个?

回答:

/e开关将替换表达式转换为常规的perl表达式。您需要引用' MB'并使用级联(.)。

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

应该工作。

回答:

变化

(1024*1024*2) MB $2 

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

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

以上是 为什么我的Perl单行报告“Bareword发现操作员期望的位置”? 的全部内容, 来源链接: utcz.com/qa/265197.html

回到顶部