我试图遍历两个大小相同的数组,并用每个索引处找到的元素替换一个字符串。
循环只执行第一个元素。
#!/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&lt; = $#urls现在具有正确的循环大小,但是对$ urls [$ i]的调用永远不会在该数组中获得不同的元素。它始终是相同的元素
我认为这是我正在进行的字符串替换的问题,循环将按预期打印出元素,但是当我在字符串替换中使用计数器时不会。
答案 0 :(得分:3)
第一次迭代后,$insert
不再满足URI
将您的循环更改为:
for( my $i = 0; $i <= $#jobs; $i++ ){
my $temp = $insert;
$temp =~ s/URL/$urls[$i]/g;
print $temp,"\n";
}
答案 1 :(得分: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";
}
感谢所有帮助过的人。
答案 2 :(得分:0)
$#jobs
获取最后一个元素{1}}的最后一个索引位置。然后循环从1
到0
。改为使用0
获取元素总数,并在@jobs
和0
之间进行循环。
答案 3 :(得分:0)
尝试这样做:
foreach my $i (0 .. $#jobs) { print "$i\n"; }