2014-01-18 57 views
0

衝突我有兩個循環的腳本:循環在Perl

#!/usr/bin/perl 

use Bio::Graphics; 
use Bio::SeqFeature::Generic; 

$seq = ""; 
$seqlength = length($seq); 
$count = 0; 
while ($line = <>) { 
    if (/^>/) { 
    $count = 1; 
    next; } 
    if ($count == 1) { 
    chomp; 
    $seq .= $line; } 
} 

while (<>) { 
    chomp; 
    next if /^\#/; 
    my @gff_data = split /\t+/; 
    next if ($gff_data[2] ne "gene"); 
    my $feature = Bio::SeqFeature::Generic->new(
               -display_name => $gff_data[8], 
               -score  => $gff_data[5], 
               -start  => $gff_data[3], 
               -end   => $gff_data[4] 
              ); 
    $track->add_feature($feature); 
} 

沒有第一環,第二環工程。但是,在第一個循環中,第二個循環不起作用。爲什麼?

回答

0

每個while都會耗盡讀取傳遞給腳本的文件,因此忽略一個讓其他人執行其工作。

+0

我該如何避免這種情況?使用兩個循環而不是加入循環。 – user2886545

+0

@ user2886545 - 你剛剛在處理fasta文件嗎? – Kenosis

+0

這是一個GFF文件....但是在某些行後面## FASTA,下面這是一個頭(> jkdssd),然後是序列,就像一個fasta文件。 – user2886545

0

在每次使用<> while循環,這是默認的類似於採取從STDIN<>輸入相當於<STDIN>while (<>)相當於while($_ = <>)或在任何點更具體while ($_ = <STDIN>) 所以時間你不能運行兩個while循環。因爲這兩者都是無限循環。如果你想同時得到循環來工作,而不是使用STDIN使用的文件句柄,通過open命令創建並使用相同的文件句柄,假設FH是文件句柄變量,那麼所有的行存儲在

@lines = <FH> 

,然後用這些@line在你的while循環中。