我收到了一个我不明白的奇怪错误。如果我发现一个单词($ 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";
}
但是我得到了这个错误:
在insert_genes_maker.pl第283行,第7731行中使用“严格引用”时,不能将字符串(“ undef”)用作HASH引用。
有什么帮助吗?
答案 0 :(得分:1)
让我猜猜:在程序的更下方,您在第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
...