为什么会产生错误:
使用未初始化的值$ match代替(s ///)...
my $sub = 0; #added
my $m; #added
open (FH1, "<FILE1.txt") || die $!;
open (FH2, "<FILE2,txt") || die $!;
my @strings = (<FH2>); #each line of the file into an array
close FH2 or die $!;
my $here;
while ( my $url = <FH1> ) {
chomp $url;
foreach my $sub (@strings) {
my $repeat = 1;
while ((my $m = $_) =~ s|(?<![/])(?:[/](?![/])[^/]*){$repeat}[^/]*\K|$sub|) #<-- Error states the error is occurring here
{
print "$m\n";
$repeat++;
push( @{ $here->{$url} }, $m );
}
}
}
文件中肯定存在某些东西(因为我可以打印foreach
循环中的每一行)并且正则表达式替换肯定有效,因为它在我尝试移动它之前已在其自己的程序中进行了测试进入这个计划。
我忽略了一些明显的东西吗?
非常感谢您的帮助,非常感谢
答案 0 :(得分:4)
您永远不会向$_
分配任何内容。
while ((my $match = $_) =~ ...
应该是
while ((my $match = $url) =~ ...
答案 1 :(得分:2)
$match
未初始化。它设置为$_
,未初始化 - 您明确提供循环变量($url
和$sub
),因此在这种情况下隐式变量未初始化。
我认为你的意思是... ($match = $url) =~ s/the subst/.../ ...
答案 2 :(得分:0)
@strings
有一个未初始化的字符串。您正在尝试使用此字符串(通过$sub
)来替换正则表达式。确保@strings
包含您想要的数据。