smf*_*ote 2 perl foreach nested
我编写了一个打开两个包含列表的文件的perl脚本.我想在第一个列表中找到不在第二个列表中的项目.该脚本使用两个foreach循环.外部循环遍历第一个列表的每一行,提取必要的项目信息.内循环遍历第二个列表,提取项目信息,然后将该信息与第一个列表中的项目进行比较.
因此,我们的想法是,对于第一个列表中的每个项目,脚本将循环遍历第二个列表中的所有项目,以查找匹配项.问题是内部foreach循环只循环一次.在嵌套while循环中循环遍历MySQL表时,我在PHP中遇到了同样的问题.解决方案是使用mysql_data_seek为外部循环的每次迭代重置mysql数据的索引.我怎么能用文件句柄在perl中做到这一点?
如果您的内部循环是文件句柄迭代器,那么每次到达它时都需要重置它(例如,通过关闭并重新打开文件).
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)
| 归档时间: |
|
| 查看次数: |
3592 次 |
| 最近记录: |