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<=$#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

$#jobs1在您的情况下,获取最后一个元素的最后一个索引位置。然后循环是 from00。改为使用@jobs它来获取元素的总数,并在 和 之间进行0循环1

于 2013-03-21T17:27:00.427 回答
0

尝试这样做:

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