gpt4 book ai didi

perl - 错误消息:无法对未定义的值调用方法“做”

转载 作者:行者123 更新时间:2023-12-03 18:29:29 25 4
gpt4 key购买 nike

# #################################################
# Subroutine to add data to the table BlastSearch
# Could be redone to be more general, but it seems more
# efficient to add data as it is pulled from the xml.
# #################################################
sub addData {
my (@data, $dbhandle) = @_;
print join(", ", @data) . "\n";
my $sqlcmd = "insert into BlastSearch values('" . join("','",@data) . "')";
$dbhandle->do($sqlcmd) or die $DBI::errstr;
}


这给出了错误消息“无法在未定义的值上调用方法“ do”。此特定方法中是否有任何导致问题的原因?如果需要,我可以添加更多脚本。我唯一的猜测是它与“ @data”有关,该代码填充在以下代码中:

# #################################################
# Subroutine to find the:
# Accession id
# e-value (Hsp_evalue)
# number of identites (Hsp_identity)
# of the top five matches.
# #################################################
sub parseBlastXML {
my ($file, $dbhandle) = @_;
my $xml = new XML::Simple();
my $data = $xml->XMLin($file, forcearray=>[qw(Hit)], keyattr=>[]);
my $entry_node = $data->{BlastOutput_iterations};
my $iterhit = $entry_node->{Iteration}->{Iteration_hits}->{Hit};

#quick find of uniprotID
my $uniProtID = substr($file, 0, 6);

my $count = 0;
foreach my $val (@$iterhit) {
my @dataarray;
if ($val->{Hit_hsps} && $count < 5) {
print "\n";
print "Hit accession: " . $val->{Hit_accession} . "\n";
print "e-value: " . $val->{Hit_hsps}->{Hsp}->{Hsp_evalue} . "\n";
print "number of ID's: " . $val->{Hit_hsps}->{Hsp}->{Hsp_identity} . "\n";
push(@dataarray, $val->{Hit_accession});
push(@dataarray, $val->{Hit_hsps}->{Hsp}->{Hsp_evalue});
push(@dataarray, $val->{Hit_hsps}->{Hsp}->{Hsp_identity});
push(@dataarray, $uniProtID);

addData(@dataarray, $dbhandle);

$count ++;
}
}
return $data;
}

最佳答案

以下是一个错误,因为@data始终会提取@_中的所有值,而使$dbhandle不确定。

sub addData {
my (@data, $dbhandle) = @_; # $dbhandle will always be undefined


要解决此问题,您需要对参数进行重新排序,并始终使数组位于赋值的最后。

sub addData {
my ( $dbhandle, @data ) = @_;

...;
}

sub parseBlastXML {
...;
addData( $dbhandle, @dataarray );


注意:也有可能将dbh移出参数列表末尾。但是,这样的编码风格不是一个好主意。

关于perl - 错误消息:无法对未定义的值调用方法“做”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26569754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com