2013-02-27 51 views
0

這是爲什麼產生錯誤:Perl的使用,以代替未初始化值的

在替代(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循環中的每一行),並且正則表達式替換在我試圖將其移入此程序之前已經在其自己的程序中進行過測試。

這是我明顯忽略的東西嗎?

你的幫助會非常讚賞,非常感謝

+1

感謝**縮進你的代碼**正確 – 2013-02-27 17:00:25

+1

歉意,感謝您的擡頭 – 2013-02-27 17:09:22

回答

4

您從未將任何內容分配給$_

while ((my $match = $_) =~ ... 

應該

while ((my $match = $url) =~ ... 
+0

這是一件很明顯我俯瞰的話,感謝您的幫助 – 2013-02-27 17:23:12

0

@strings有一個未初始化字符串。您正在嘗試使用此字符串(通過$sub)替換正則表達式。確保@strings有你想要的數據。

2

$match未初始化,因爲錯誤說。它被設置爲$_,這是未初始化的 - 您明確提供了循環變量($url$sub),所以在這種情況下隱式變量未被初始化。

我假設你的意思... ($match = $url) =~ s/the subst/.../ ...

+0

很明顯的東西那時我忽略了,謝謝你的幫助 – 2013-02-27 17:23:33