0

同じサイズの 2 つの配列をループして、文字列を各インデックスで見つかった要素に置き換えようとしています。

ループは最初の要素のみを実行しています。

#!/usr/bin/perl
use strict;
use warnings;

# SQL statement for string replace
my $insert = "INSERT INTO table ( JOB, URI ) VALUES ( 'JOB', 'URL' );";
#array of jobs
my @jobs = ("job1", "job2");
#array of url's
my @urls = ("http://www.yahoo.com", "http://www.google.com");

# for each job replace the "URL" with a url from 
# the url array, then print the new sql insert statement
for( my $i = 0; $i <= $#jobs; $i++ ){
    $insert =~ s/URL/$urls[$i]/g;
    print $insert."\n";
}

編集 - $i<=$#urls を使用すると正しいループ サイズが得られるようになりましたが、$urls[$i] を呼び出しても、その配列で別の要素が取得されることはありません。いつも同じ要素

これは私が行っている文字列置換の問題だと思います。ループは期待どおりに要素を出力しますが、文字列置換でカウンターを使用するとそうではありません。

4

4 に答える 4

3

最初の繰り返しの後、$insertもう満足していませんURI

ループを次のように変更します。

for( my $i = 0; $i <= $#jobs; $i++ ){
    my $temp = $insert;
    $temp =~ s/URL/$urls[$i]/g;
    print $temp,"\n";
}
于 2013-03-21T19:26:02.883 に答える
1

私が持っていた挿入ステートメントの文字列置換の問題に答えるために、その文字列のテキストを変更しようとしましたが、次のループで同じ検索と置換を行いましたが、一致する文字列に URL がなくなりました。その変数をループ内に移動する必要があります。

#!/usr/bin/perl
use strict;
use warnings;

#array of jobs
my @jobs = ("job1", "job2");
#array of url's
my @urls = ("http://www.yahoo.com", "http://www.google.com");

# for each job replace the "URL" with a url from 
# the url array, then print the new sql insert statement
for( my $i = 0; $i <= $#jobs; $i++ ){
    # SQL statement for string replace
    my $insert = "INSERT INTO table ( JOB, URI ) VALUES ( 'JOB', 'URL' );";
    $insert =~ s/URL/$urls[$i]/g;
    print $insert."\n";
}

助けてくれたすべての人に感謝します。

于 2013-03-21T19:26:11.177 に答える
0

これをやってみてください:

foreach my $i (0 .. $#jobs) { print "$i\n"; }
于 2013-03-21T17:30:03.160 に答える
0

$#jobsあなたの場合、最後の要素の最後のインデックス位置を取得1します。そのときのループは from 0to0です。代わりに使用@jobsして、要素の総数を取得し、 と の間0でループを実行します1

于 2013-03-21T17:27:00.427 に答える