之前在使用perl时遇到一个比较奇怪的错误,程序大概是这样的:
while(<IN>){
my @line = split("\t",$_);
my ($chr,$start,$end) = split(/[\:\-]/,$line[2]);
while(my($key,$value) = each %region){
my($a,$b,$c) = split(/[\:\-]/,$key);
next if($a ne $chr);
print "1\n" if($line[0] eq "BjuB010898");
if(($start >= $b) && ($end <= $c)){
print OUT $_;
last;
}
}
}
主要就是在一个循环中使用while和each遍历哈希,然而结果总是少了一些数据,后来将哈希改为数组,for循环数组后就没问题了。
网上查询原因才知道用 while 循环 + each 函数遍历哈希表的时候,如果提前跳出了while循环,那么下次再接着用 each 函数遍历该哈希表的时候,会从上次已经遍历过的关键字的下一个关键字处开始遍历,因此就会漏掉很多的数据。
因此在使用while遍历hash时,最好不要将其嵌套在一个循环中。
更多perl语言知识可观看 Perl语言高级编程 学习!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!