【问题标题】:Cannot access array elements using counter from loop无法使用循环中的计数器访问数组元素
【发布时间】:2013-03-21 17:22:38
【问题描述】:

我正在尝试遍历两个大小相同的数组,并用在每个索引处找到的元素替换一个字符串。

循环只做第一个元素。

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

EDIT- 使用 $i

我认为这是我正在执行的字符串替换的问题,循环将按预期打印出元素,但当我在字符串替换中使用计数器时不会。

【问题讨论】:

    标签: perl


    【解决方案1】:

    第一次迭代后,$insert 不再满足 URI

    将循环更改为:

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

    【讨论】:

      【解决方案2】:

      为了回答插入语句中的字符串替换问题,我试图更改该字符串中的文本,然后下一个循环执行相同的搜索和替换,但字符串中不再有要匹配的 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";
      }
      

      感谢所有帮助过的人。

      【讨论】:

        【解决方案3】:

        $#jobs 获取最后一个元素的最后一个索引位置,1 在你的情况下。然后循环从00。改用@jobs 来获取元素总数,并在01 之间进行循环。

        【讨论】:

          【解决方案4】:

          尝试这样做:

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

          【讨论】:

            猜你喜欢
            • 2021-05-13
            • 2019-08-11
            • 2020-08-24
            • 2020-05-03
            • 2017-12-05
            • 2016-08-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多