我是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循环中,但这不是必需的,并且可以多次调用外部命令。
答案 0 :(得分:1)
在第一个循环结束时,文件指针位于文件的末尾。如果你需要另一轮,你必须把它带回来。
您可以尝试倒回文件:
seek(asterisk_Output,0,1);
或(如果您的逻辑允许)更改foreach
和while
(以便您只阅读一次):
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...
}
}