Pergunta

Eu estou tentando entender um código Perl em particular de vcake . Normalmente eu achar meu caminho em Perl, mas os seguintes defletores afirmação me. Eu suspeito que este é simplesmente um erro, mas eu não estou completamente certo. A declaração é:

foreach my $seq (keys %$set) {
    if( (defined $set->{$seq}) and (my $numReads >= ($coverage)) ) {
        do something;
    }
    ...
}

$coverage foi definido no início do arquivo como um inteiro escalar (por exemplo, 10) e nunca é novamente escrito. $numReads só é usado na linha acima, nenhum outro lugar !

$set, por outro lado, é modificada dentro do loop para a primeira parte da condição faz todo o sentido. O que eu não entendo é a segunda parte, porque a meu ver, isso vai sempre avaliar com o mesmo valor e Eu não entendo o significado de $numReads ou >= aqui . Alguém por favor pode me esclarecer? São variáveis ??automáticas lá talvez invisíveis envolvidos?

Foi útil?

Solução

meios my $numReads: Criar uma nova variável local no contexto do circuito foreach. O seu valor inicial é undef, que no contexto numérica é tratado como 0. Assim, o código lê:

if ((...) and (0 >= ($coverage)) ) {
}

que significa "fazer algo" nunca é executado a menos que $ cobertura é definido como 0 ou menos.

Se este era um código de depuração, eu supor que US $ cobertura é usado para ativar / desativar esta declaração.

Meu palpite é:. Você encontrou um bug

Outras dicas

Pode-se também notar que a menos que $ set é uma referência ao conjunto%, ou algum outro hash que imita a estrutura do conjunto%, então a linha

foreach my $seq (keys %set)

Não corresponde a condição

defined $set->{$seq}

Desde $ set -> {$ seq} dereferences um ref hash e% conjunto é um hash. É mais provável que este é um segundo bug do que é que alguém tenha instanciado tanto a% conjunto de hash e os US $ set escalar com um hashref.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top