无法理解的死循环

无法理解的死循环

无法理解的死循环
1 论坛的各位朋友,我近日用Perl写了个脚本用来进行文件验证,碰到了一个很奇怪的死循环。代码如下:
[quote]
open(VALIDATE,"C:/receive/bak.txt")||die "$!";
@sourceID=<VALIDATE>;
close(VALIDATE);

$reminder=0;
#print "@sourceID";
chomp $sourceID[0];
for($loopvalid=0;$loopvalid<=$#sourceID;$loopvalid=$loopvalid+1)
{
chomp $sourceID[$loopvalid+1];
if(-e "C:/temp/111111.PAYLOADS.".$sourceID[0].$sourceID[$loopvalid+1]."aud")
{
print "Passed validation!\n";
$reminder+=1;

}
else
{
print "C:/temp/111111.PAYLOADS.".$sourceID[0].$sourceID[$loopvalid+1]."aud missed. ";
print "\nError occurred in validation!\n";

}
}

[/quote]
BAK文件的内容如下:
2
.05-13-2006_000000.
.05-14-2006_000000.

奇怪的是运行后程序即陷入死循化,不断重复执行下面两句: print "C:/temp/111111.PAYLOADS.".$sourceID[0].$sourceID[$loopvalid+1]."aud missed. ";
print "\nError occurred in validation!\n";

在for循环中明明我已经设定了循环退出条件了,感到不解。请Perl高手指点一下,先谢谢了。
[CCB]10[/CCB]
for($loopvalid=0;$loopva.
for($loopvalid=0;$loopvalid<=$#sourceID;$loopvalid=$loopvalid+1)
=> 改为
for($loopvalid=0;$loopvalid<=$#sourceID-1;$loopvalid=$loopvalid+1)
如果到达数组最后一个元素 $sourceID[$loopvalid+1]的取值就出问题了
当$loopvalid=$#sourceID .
当$loopvalid=$#sourceID 时候你使用 了$sourceID[$loopvalid+1];;这样perl就分配了一个空间,所以数组的长度就增加了。呵呵,比较有意思的问题
感觉这样会好一点,一次读.
感觉这样会好一点,一次读取文件有可能内存不够啊。
open(VALIDATE,"C:/receive/bak.txt")||die "$!";
$id=chomp <VALIDATE>;
while( <VALIDATE>)
{chomp $_;

if(-e "C:/temp/111111.PAYLOADS.".$id.$_."aud")
{
print "Passed validation!\n";
$reminder+=1;

}
else
{
print "C:/temp/111111.PAYLOADS.".$id.$_."aud missed. ";
print "\nError occurred in validation!\n";

}
}
close(VALIDATE);
Perl太神奇了 [CCB]2[/CC.
Perl太神奇了 [CCB]2[/CCB]
我没意识到$sourceID[$loopvalid+1]时@sourceID会自动填充 导致数组自动累加 以至于出现楼主所说的一直输出错误信息 呵呵