PERL: нельзя использовать строку ("undef") в качестве ссылки на HASH, в то время как "строгие ссылки" - PullRequest
0 голосов
/ 17 января 2019

Я получил эту странную ошибку, которую я не понимаю. Я пытаюсь заполнить хеш другим хешем, если я найду слово ($ target), заполните его "undef".

# Parsing ...

    my $target;
    my $idx;
    my $gene_description_ref  = \@gene_description;

    # ... the functional annotation 

    $target = $tax_function . "_topblasthit";
    $idx = undef;

    # Get the index of "arth_topblasthit" in the array @gene_description

    foreach ( 0 .. $#gene_description ) {
        if ( index ( $gene_description_ref->[ $_ ], $target ) >= 0 ) {
            $idx = $_;
            last;
        }
    }

    if (defined $idx){

        my @result = func_formatting($gene_description[$idx]);
        $gene_hash{$gene_id}{Function} = $result[0];
        $gene_hash{$gene_id}{Accession} = $result[1];

    } else {    # Gene has no function 
        $gene_hash{$gene_id} = "undef";
    }

Но я получил эту ошибку:

Невозможно использовать строку ("undef") в качестве ссылки HASH, в то время как "строгие ссылки" используются в строке 283 insert_genes_maker.pl, строке 7731.

любая помощь, пожалуйста?

1 Ответ

0 голосов
/ 17 января 2019

Позвольте мне угадать: далее в вашей программе в строке 283 что-то вроде этого:

my $function = $gene_hash{$some_var}->{Function};

Это произойдет с упомянутым сообщением об ошибке, потому что у вас есть скаляры (то есть "undef"), сохраненные как значения в вашем хэше. Вам либо нужно защитить доступ, например

if (ref($gene_hash{$some_var}) eq "HASH") {
    # access value as hash here
    ...

или используйте другой метод для обнаружения «неизвестного», например,

} else {    # Gene has no function 
    $gene_hash{$gene_id} = {};
}
...
if (exists $gene_hash{$some_var}->{Function}) {
    # access function key in here
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...