-1

我的以下 perl 单行程序抛出错误“在连接 (.) 或字符串中使用未初始化的值 $1”

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

提前致谢, Faez

4

1 回答 1

1

你的单行:

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

有以下错误:

  • 您缺少标有 HERE 的右括号。
  • %hash在这个单行中的任何地方都没有定义。
  • q($hash{$1})不会对变量进行插值。qq()但是,会的。

你可能会考虑:

  • /#/将触发#行中的任何位置,您可能会考虑/^\s*#/进行更精确的匹配。
  • 使用警告:-we
  • \\w在字符类中表示“反斜杠或 w”,而不是\w(字母数字)。
于 2012-09-06T11:11:57.313 回答