regex - 替换中未初始化的反向引用

标签 regex perl

假设我必须使用单个替换来执行此替换,那么避免此错误的首选方法是什么:

Use of uninitialized value $2 in concatenation (.) or string at -e line 1.

With this Perl code:

perl -e 'use strict;use warnings;my $str="a";$str=~s/(a)|(b)/$1foo$2/gsmo;'

这里的目标是根据 $str 包含的内容打印“afoo”或“foob”。

我可以使用no warnings;,但我担心我会错过其他“真正的”警告。我也知道使用一种模式会使事情变得复杂,但我的实际模式要复杂得多。

如果您关心,实际替换更接近:

#!perl
my $search = q~(document\.domain.*?</script>)|(</head>)~;
my $search_re = qr/$search/smo;
my $replace = q("$1
<script src=\"/library.js\"></script>
$2");
while (<*.tmpl>) {
  my $str = fead_file($_);
  $str =~ s/$search_re/$replace/gee;
}

但更复杂的是,基本上上面的代码只是从数据库读取以获取搜索和替换,然后对模板执行它们。每次提交都必须运行这个脚本两次,显然会带来太多的开销……他们是这么说的……

最佳答案

你可以:

my $replace = q("@{[$1||'']}
<script src=\"/library.js\"></script>
@{[$2||'']}");

(在 5.10+ 上使用//代替 ||)

关于regex - 替换中未初始化的反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6914629/

相关文章:

java - 替换Java字符串中特定长度的子字符串

linux - 如何跟踪子进程

除撇号外的所有非字母数字的java字符串拆分

c++ - 有条件地替换字符串中的正则表达式匹配

php - 用 <img> 标签替换 <a> 图片链接

perl - 在 Perl 中正确处理 UTF-8

perl - 如何进行正确的 IO::Select 错误处理?

perl - 从 perl 脚本调用 bash 脚本

arrays - Perl : Print Name of Array Passed to sub routine

javascript - 正则表达式替换 html 标签外的文本