我是Perl的初学者。我正在使用Below Perl命令来搜索和替换" / $"我的tcl脚本中的顺序。这在直接在linux命令行上使用时效果很好。
/**
* @return int 1 on success, 0 means failure
*/
我打电话使用System Command在另一个Perl脚本中调用上面的Perl One线程,并且仅使用" `"返回Tick。
perl -p -i -e 's/\/\$/\/\\\$/g' sed_list.tcl
我收到了以下错误。请帮助解决这个问题。
system(`perl -p -i -e 's/\/\$/\/\\\$/g' sed_list.tcl`);
`perl -p -i -e 's/\/\$/\/\\\$/g' sed_list.tcl`;
我不知道我是否可以使用任何其他分离操作符,如%和#就像SED命令,但是,当我使用'%'分离的操作员,我没有看到错误,但没有完成工作。
Bareword found where operator expected at -e line 1, near "$/g"
(Missing operator before g?)
Final $ should be \$ or $name at -e line 1, within string
syntax error at -e line 1, near "s//$/"
Execution of -e aborted due to compilation errors.
我找不到足够的结果来解决这个特殊的问题' $'网上的变量。任何帮助表示赞赏。
答案 0 :(得分:0)
您可以通过将命令传递给系统函数或使用反引号(``)运算符来执行外部命令。请将命令作为字符串传递给 system()函数:
system(q{perl -p -i -e 's/\/\$/\/\\\$/g' sed_list.tcl})
或使用反引号:
`perl -p -i -e 's/\/\$/\/\\\$/g' sed_list_gen.tcl`
编辑: 正如保罗在评论中所建议的那样。
答案 1 :(得分:0)
有人在这里建议我在使用System Command或在perl脚本中使用BackTicks调用另一个命令时应该逃避所有反斜杠。但后来他们删除了答案。它对我有用。我要感谢每一个人努力并帮助我解决我的问题。
这是正确的工作代码。
`perl -p -i -e 's/\\\/\\\$/\\\/\\\\\\\$/g' sed_list_gen.tcl`;
或使用系统功能,如下所示
system("perl -p -i -e 's/\\\/\\\$/\\\/\\\\\\\$/g' sed_list_gen.tcl");
再次感谢社区帮助我。 。 。