2013-03-21 105 views
0

我想通過兩個相同大小的數組循環,並用每個索引處找到的元素替換一個字符串。無法使用計數器從循環訪問數組元素

循環只做第一個元素。

#!/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 < = $#網址現在有正確的環的大小,而是調用$網址[$ i]從來沒有得到該數組中不同的元素。它總是相同的元素

我認爲這是一個問題,我正在做的字符串替換,循環會打印出預期的元素,但不是當我在字符串替換中使用計數器。

回答

3

第一次迭代後,$insert沒有了內容URI

改變你的循環爲:

for(my $i = 0; $i <= $#jobs; $i++){ 
    my $temp = $insert; 
    $temp =~ s/URL/$urls[$i]/g; 
    print $temp,"\n"; 
} 
0

$#jobs得到最後一個元素的最後一個索引位置,1在你的情況下。循環是從00。改爲使用@jobs,即得到元素的總數,並在01之間進行循環。

0

試着這樣做:

foreach my $i (0 .. $#jobs) { print "$i\n"; } 
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"; 
} 

感謝所有幫助。