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



我是Perl的初学者。我正在使用下面的perl命令在我的tcl脚本中搜索和替换"/$"序列。当直接在 linux 命令行上使用时,这很有效。

perl -p -i -e 's//$//\$/g' sed_list.tcl

我正在使用系统命令调用上述Perl在另一个Perl脚本中的一行,并且仅使用" ' "反勾号。

system(`perl -p -i -e 's//$//\$/g' sed_list.tcl`);
`perl -p -i -e 's//$//\$/g' sed_list.tcl`;

我收到以下错误。请帮助解决此问题。

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.

我不知道我是否可以像 SED 命令一样使用任何其他分离运算符,例如 % 和 #,但是,当我使用"%"运算符进行分离时,我没有看到错误,但工作没有完成。

`perl -p -i -e 's%/$%/\$%g' sed_list.tcl`; 

我在网上找不到关于这个特定问题的"$"变量的足够结果。任何帮助,不胜感激。

这里有人建议我应该在使用系统命令或从perl脚本中使用BackTicks调用另一个命令时转义所有反斜杠。但后来他们删除了他们的答案。它对我有用。我要感谢每个人的努力并帮助我解决我的问题。

这是正确的工作代码。

`perl -p -i -e 's/\/\$/\/\\\$/g' sed_list_gen.tcl`;

或使用系统功能,如下所示

system("perl -p -i -e 's/\/\$/\/\\\$/g' sed_list_gen.tcl");

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

可以通过将命令传递给系统函数或使用反引号 ('') 运算符来执行外部命令。请将命令作为字符串传递给 system() 函数:

system(q{perl -p -i -e 's//$//\$/g' sed_list.tcl})

或使用反引号作为:

`perl -p -i -e 's//$//\$/g' sed_list_gen.tcl`

编辑:正如保罗在评论中建议的那样。

最新更新