Perl while while循环只在for循环中循环一次
问题描述:
我是Perl的新手,并正在为此而苦苦挣扎。我如何使下面的代码迭代asterisk_Output for循环的每次运行?目前,它在for循环的第一次迭代中完成while循环,但不在后续循环中完成。Perl while while循环只在for循环中循环一次
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.
}
}
我有它的工作的唯一途径是通过把内部的顶线环,但是这是联合国需要做出的外部命令多次调用。
答
在第一次循环结束时,文件指针位于文件末尾。如果你需要另一轮,你必须把它带回来。
你可以尝试要么退文件:
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...
}
}
+3
鉴于文件句柄是外部命令的输出,我期望您的第一个选项将返回非法查找。因此,第二或第三是我的建议。 – Miller 2014-10-19 21:32:22
什么是@ monitor_trunks?这与外部命令有关吗? – 2014-10-19 20:57:05
查看http://stackoverflow.com/questions/12043592/perl-re-reading-from-already-read-filehandle – 2014-10-19 20:57:47
@martinclayton鉴于文件句柄是从外部命令输出而不是文件,该解决方案将可能会返回非法寻求。 – Miller 2014-10-19 21:34:54