perl中while循环+each函数遍历哈希易错点

之前在使用perl时遇到一个比较奇怪的错误,程序大概是这样的: while(<IN>){my @line = split("\t",$_);my ($chr,$start,$end) = split(/[\:\-]/,$line[2]);while(my($key,$value) = eac...

之前在使用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语言高级编程 学习!

  • 发表于 2018-09-07 15:38
  • 阅读 ( 2832 )
  • 分类:perl

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
安生水
安生水

350 篇文章

作家榜 »

  1. omicsgene 702 文章
  2. 安生水 350 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 82 文章
  6. rzx 78 文章
  7. 红橙子 78 文章
  8. CORNERSTONE 72 文章