Perl:在Windows上的程序中使用Perl单行程序

时间:2012-09-06 10:32:44

标签: perl

我的以下perl one-liner会引发错误“在连接(。)或字符串中使用未初始化的值$ 1”

`perl -pi.bak -e "if(!/#/){s/ PERFORM ([\\w*-]+)\.?/qq(#  PERFORM $1.\n) . q($hash{$1})/eg;}" TestFinal.txt`;

先谢谢, Faez

1 个答案:

答案 0 :(得分:1)

你的单行:

perl -pi.bak -e "if (!/#/) { 
    s/ PERFORM ([\\w*-]+\.?/   # HERE
        qq(#  PERFORM $1.\n) . q($hash{$1})/eg;}" TestFinal.txt

有以下错误:

  • 您缺少标有此处的右括号。
  • %hash未在此单行中的任何位置定义。
  • q($hash{$1})不会插入变量。但是,qq()会。

您可以考虑的事项:

  • /#/会在该行的任意位置触发#,您可以考虑/^\s*#/进行更精确的匹配。
  • 使用警告:-we
  • 字符类中的
  • \\w表示“反斜杠或w”,而不是\w(字母数字)。