为什么我的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