2014-04-27 3 views
0

어떻게이 문에 카운터를 추가 할 수 있습니까?if 문에 카운터 추가

# go through each reference file 
for my $file (@reference_files) 
{ 
    open my $ref, "<", $file or die "Can't open reference file '$file': $!"; 
    while (my $line = <$ref>) 
    { 
     chomp $line; 
     my ($scaffold, undef, $type, $org_snp, $new_snp, undef, undef, undef, $info) = split /\t/, $line; 
     next if not $scaffold =~ /^KB/; 
     next if not $type =~ /^GENE/i; 

     my ($transcript_id, $gene_name, $auto) = split /[;][ ]/, $info; 
     $gene_name = $1 if $gene_name =~ /["]([^"]*)["]/; 

     if (my $matching_genes = $genes{$scaffold}) 
     { 
      say join "\t", $gene_name, $_ for values %$matching_genes; 
     } 
    } 

    say "###"; 
} 

스크립트를 추가적으로 모두 $matching_genes으로 계산하고 싶습니다. 이것을 통합 할 수있는 방법이 있습니까? 해시의 모든 값을 가져 오는 동안 표준 카운터 (예 : $i++)로 실패했습니다.

는 는

답변

2

당신은, 당신의 for 루프 전에 0에 intialized 상단에 글로벌 카운터 변수가 말할 수 :

:

my $counter = 0; 

# go through each reference file 
for my $file (@reference_files) 
# ... Rest of your code ... 

그런 다음 $matching_genes가 할당 된 if 문 내부 $counter를 증가 할 수 있습니다

if (my $matching_genes = $genes{$scaffold}) 
{ 
     $counter++; 
     say join "\t", $gene_name, $_ for values %$matching_genes; 
} 
1
my $count=0; 
# go through each reference file 
for my $file (@reference_files) 
{ 
    open my $ref, "<", $file or die "Can't open reference file '$file': $!"; 
    while (my $line = <$ref>) 
    { 
     chomp $line; 
     my ($scaffold, undef, $type, $org_snp, $new_snp, undef, undef, undef, $info) = split /\t/, $line; 
     next if not $scaffold =~ /^KB/; 
     next if not $type =~ /^GENE/i; 

     my ($transcript_id, $gene_name, $auto) = split /[;][ ]/, $info; 
     $gene_name = $1 if $gene_name =~ /["]([^"]*)["]/; 

     if (my $matching_genes = $genes{$scaffold}) 
     { 
      say join "\t", $gene_name, $_ for values %$matching_genes; 
      $count =+ scalar(keys %$matching_genes); 
     } 
    } 

    say "###"; 
} 
print "total: $count\n";