2013-12-09 6 views
2

Я пытаюсь понять кусок кода, который петли над файлом, выполняет различные назначения, затем вводит набор операторов if, где строка, по-видимому, сравнивается ни с чем. Что такое /nonsynonymous/ и /prematureStop/ по сравнению с здесь? В основном я испытываю питон.Что делает это утверждение if? (сравнение строк)

open(IN,$file); 
    while(<IN>){ 
     chomp $_; 
     my @tmp = split /\t+/,$_; 
     my $id = join("\t",$tmp[0],$tmp[1]-1); 
     $id =~ s/chr//; 
     my @info_field = split /;/,$tmp[2]; 
     my $vat = $info_field[$#info_field]; 
     my $score = 0; 
     $self -> {VAT} ->{$id}= $vat; 
     $self ->{GENE} -> {$id} = $tmp[3]; 
     if (/nonsynonymous/ || /prematureStop/){... 

ответ

6

Он сравнивается с текущей линией ввода ($ _).

По умолчанию perl будет автоматически использовать текущую строку ввода ($ _) при выполнении регулярных выражений, если не переопределено (с = ~).

4

От http://perldoc.perl.org/perlretut.html

Если вы соответствие с специальной переменной по умолчанию $ _, то $ _ = ~ часть может быть опущена:

$_ = "Hello World"; 
if (/World/) { 
    print "It matches\n"; 
} 
else { 
    print "It doesn't match\n"; 
} 
3

Часто в Perl, если конкретная переменная не указана, предполагается, что вы хотите использовать переменную по умолчанию $_. Например, цикл while назначает входящие строки от <IN> к этой переменной, chomp $_; можно было бы также написать chomp;, а регулярные выражения в выражении if также будут совпадать с $_.

Смежные вопросы