假設我必須使用單個取代做這個替代,什麼是避免這種錯誤的優選方法:未初始化向引用在換人
Use of uninitialized value $2 in concatenation (.) or string at -e line 1.
有了這個Perl代碼:
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;
}
但更復雜,基本上上面的代碼只是從數據庫中讀取,以獲得搜索和替換,然後將它們確實給模板。每次提交都要運行這個腳本兩次會引入太多的開銷,顯然...所以他們說...
爲什麼不在循環中做兩個不同的搜索和替換操作?與只需讀取文件的時間相比,應該無法檢測到開銷。 – Nemo
循環是我無法更改的庫。我只能提供替代。 – Rob