0

なぜこれがエラーを生成するのですか?

置換(s ///)での初期化されていない値$matchの使用...

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)、正規表現の置換は、このプログラムに移動する前に独自のプログラムでテストされているため、間違いなく機能します。

私が見落としているのは明らかなことですか?

あなたの助けは大いにありがたいです、多くの感謝

4

3 に答える 3

4

に何も割り当てないでください$_

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

する必要があります

while ((my $match = $url) =~ ...
于 2013-02-27T17:08:37.570 に答える
2

$matchエラーが示すように、は初期化されていません。これは、初期化されていないに設定されて$_います—ループ変数($urlおよび$sub)を明示的に指定しているため、この場合、暗黙の変数は初期化されません。

私はあなたがするつもりだと思います... ($match = $url) =~ s/the subst/.../ ...

于 2013-02-27T17:08:40.480 に答える
0

@strings初期化されていない文字列があります。$subこの文字列(から)を使用して正規表現を置き換えようとしています。必要なデータがあることを確認し@stringsてください。

于 2013-02-27T17:02:23.927 に答える