Perl while循环只在for循环中循环一次

时间:2014-10-19 20:52:05

标签: perl loops foreach while-loop

我是perl的新手并且正在努力解决这个问题。如何使以下代码迭代asterisk_Output每次运行for循环?目前它在for循环的第一次迭代中完成了while循环,但没有在后续循环中完成。

open(asterisk_Output, "/usr/sbin/asterisk -rx \"sip show registry\"|") or die $!;
foreach (@monitor_trunks){  
   while (my $line = <asterisk_Output>) {
       #Perform some action... Such as comparing each line.
   }
}  

我让它工作的唯一方法是将顶行放在for循环中,但这不是必需的,并且可以多次调用外部命令。

1 个答案:

答案 0 :(得分:1)

在第一个循环结束时,文件指针位于文件的末尾。如果你需要另一轮,你必须把它带回来。

您可以尝试倒回文件:

seek(asterisk_Output,0,1);

或(如果您的逻辑允许)更改foreachwhile(以便您只阅读一次):

while (my $line = <asterisk_Output>){  
   foreach (@monitor_trunks) {
       #Perform some action... Such as comparing each line.
   }
}  

第三个选项是将整个文件读入数组并将其用作循环的输入:

@array = <asterisk_Output>;

foreach (@monitor_trunks){  
   for my $line (@array) {
   #Perform some action... 
   }
}