perl有时会跳过没有模式的循环

时间:2015-02-05 09:16:54

标签: perl for-loop sqlite

我在perl中使用for循环时遇到问题。我想从数据库(在SQLite中)获取DNA序列的开始和结束的信息,然后想要从包含我的生物体的整个基因组的文件中将序列添加到数据库中。所以基本上我想要一个文本文件中的一段文字,我知道片段开始的位置和它结束的位置。所以我做的是,我将文本分解为字母,将它们放入一个数组中,然后通过选择起点和终点之间的所有元素来组成一个新数组。由于某种原因,它不会对我从数据库中提取的每一行都这样做。 到目前为止我做了什么来解决这个问题:我看看我的所有变量是否都存在,而且他们确实存在。据我所知,这不是数据库问题,也不是输入文件的问题。那么为什么skript不会遍历每个for循环?

#!/usr/bin/perl
use strict;
use warnings;
use DBI;

#... connecting to db, array @all defined etc. works all fine

while(@row= $sth-> fetchrow_array){
        $start=$row[0]; #works, is always defined
        $end=$row[1]; #works, is always defined
        $id=$row[2]; #works, is always defined
        print OUT $id; #works
        for ($i=$start;$i<$end;$i++){ #seems that this loop is sometimes ignored (without any pattern)?
            $count++;
            print OUT $count; #is printed out continuously, but not for every $id, some lines in the OUT file are just empty after the $id
            $line=$all[$i]; #this is what I actually want to do
            push (@prom, $line);
        }
        print OUT "\n"; #works
#and then go on and do things with @prom        
}

1 个答案:

答案 0 :(得分:1)

从表面上看,可以跳过for循环的唯一原因是$end <= $start

我建议您将for循环更改为

for my $i ($start .. $end-1)

并且紧接在它之前写

warn "Line being skipped: $start ... $end" if $end <= $start

通过这种方式,您将能够看到错误的数据。