从另一个Perl脚本调用时,Perl搜索和替换命令不起作用

时间:2016-05-27 09:37:23

标签: perl search replace symbols bareword

我是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.

我找不到足够的结果来解决这个特殊的问题' $'网上的变量。任何帮助表示赞赏。

2 个答案:

答案 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");

再次感谢社区帮助我。 。 。