2013-03-21 2 views
0

동일한 크기의 두 배열을 반복하고 각 인덱스에서 발견 된 요소로 문자열을 대체하려고합니다.루프에서 카운터를 사용하여 배열 요소에 액세스 할 수 없습니다.

루프는 첫 번째 요소 만 수행합니다. $ I < = $ # URL 이용

#!/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"; 
} 

편집 -이 올바른 루프 크기이지만 $ URL에 호를 갖는다 $ I]는 결코 그 어레이 내의 다른 소자를 얻을 수 없다. 그 항상 같은 요소

나는 이것이 내가 대체하고있는 문자열의 문제라고 생각한다. 루프는 예상대로 요소들을 출력 할 것이지만, 문자열 치환에서 카운터를 사용할 때는 그렇지 않다.

답변

3

을 내가 가진 insert 문을 대체하고, 그 문자열에서 텍스트를 변경하려고 시도했으며, 다음 루프는 동일한 검색을 수행하고 바꿉니다. 문자열에 더 이상 일치하는 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"; 
} 

도와 주신 모든 분들께 감사드립니다.

0

$#jobs 마지막 요소의 마지막 인덱스 위치 인 1을 얻습니다. 그러면 루프는 0에서 0까지입니다. 대신 @jobs을 사용하면 총 요소 수를 얻고 01 사이의 루프를 수행합니다.

0

이 일을보십시오 :

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

가 문자열로 문제를 대답하기 : $insert 더 이상 URI

변화 루프가로 만족하지 않습니다, 첫 번째 반복 한 후

foreach my $i (0 .. $#jobs) { print "$i\n"; } 
관련 문제