Если ваш внутренний цикл является итератором файлового дескриптора, то вам нужно будет сбрасывать его (например, закрывая и открывая файл) каждый раз, когда вы его достигнете.
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) {
...
}
}