我已经编写了一个perl脚本,用于打开包含列表的两个文件。我想在第一个列表中查找不在第二个列表中的项目。该脚本使用两个foreach循环。外部循环遍历第一个列表的每一行,提取必要的项目信息。内部循环遍历第二个列表,提取项目信息,然后将该信息与第一个列表中的项目进行比较。
因此,这个想法是,对于第一个列表中的每个项目,脚本将遍历第二个列表中的所有项目,以查找匹配项。问题是,内部foreach循环只循环一次。在PHP语言中,当在嵌套的while循环中遍历MySQL表时,我也遇到了同样的问题。解决方案是为外部循环的每次迭代使用mysql_data_seek重置mysql数据的索引。如何在perl中使用文件句柄完成此操作?
发布于 2010-06-22 00:49:56
如果您的内部循环是一个文件句柄迭代器,那么您将需要在每次到达它时重置它(例如,通过关闭并重新打开该文件)。
foreach my $outer (@outer) {
open INNER, '<', $inner_file; # <--- need to add this
while (my $inner = <INNER>) {
...
}
close INNER; # <--- optional with global scope filehandle
}或者,如果可以节省内存,可以将文件句柄输出复制到循环外部的数组中,然后迭代该数组。
open INNER, '<', $inner_file;
my @INNER = <INNER>;
close INNER;
foreach my $outer (@outer) {
foreach my $inner (@INNER) {
...
}
}https://stackoverflow.com/questions/3086576
复制相似问题