perl中嵌套的foreach循环只循环一次

smf*_*ote 2 perl foreach nested

我编写了一个打开两个包含列表的文件的perl脚本.我想在第一个列表中找到不在第二个列表中的项目.该脚本使用两个foreach循环.外部循环遍历第一个列表的每一行,提取必要的项目信息.内循环遍历第二个列表,提取项目信息,然后将该信息与第一个列表中的项目进行比较.

因此,我们的想法是,对于第一个列表中的每个项目,脚本将循环遍历第二个列表中的所有项目,以查找匹配项.问题是内部foreach循环只循环一次.在嵌套while循环中循环遍历MySQL表时,我在PHP中遇到了同样的问题.解决方案是使用mysql_data_seek为外部循环的每次迭代重置mysql数据的索引.我怎么能用文件句柄在perl中做到这一点?

mob*_*mob 8

如果您的内部循环是文件句柄迭代器,那么每次到达它时都需要重置它(例如,通过关闭并重新打开文件).

foreach my $outer (@outer) {
   open INNER, '<', $inner_file;   # <--- need to add this
   while (my $inner = <INNER>) {
      ...
   }
   close INNER;                    # <--- optional with global scope filehandle
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您可以节省内存,则可以将文件句柄输出复制到循环外部的数组,然后遍历数组.

open INNER, '<', $inner_file;
my @INNER = <INNER>;
close INNER;

foreach my $outer (@outer) {
    foreach my $inner (@INNER) {
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @smfoote,不要只说"谢谢",投票并检查旁边的复选标记.并且在将来,用你的问题发布一些代码. (2认同)
  • @smfoote,是的,让人们试着教你一些必须是真正的无赖. (2认同)