我目前正在尝试运行NERVE疫苗开发程序,该程序由Perl脚本组成,并且无法使其正常运行。我已下载并安装了所有先决条件,但每次到达代码的mysql步骤时,它都会崩溃,并显示一条错误消息:无法通过软件包“Mysql”找到对象方法“connect”(也许您忘了加载“ Mysql“?”在./NERVE第340行,第5行。我看了一下代码,并将“使用mysql”更改为“使用DBI”和“使用DBD:mysql”,但后来我得到了错误:无法使用string(“”)作为HASH引用,而“strict refs”在/usr/local/lib/perl/5.14.2/DBI.pm第604行第5行使用。
如果有人能查看mysql部分的代码并给我建议如何修复它以便我可以正确运行程序,我将不胜感激。我试过给开发者发电子邮件,但没有回复,所以我希望你们能帮助我。
以下是mysql部分的NERVE的perl代码。
use mysql;
$db=Mysql->connect("$host","$database","$user","$password");
if(!$db || (!$host || !$database || !$user || !$password)){
print "\nAttention: mysql connection parameters are missing or not correct!\n";
print "I need you to specify: host, database, user, password;\n";
print "You can do it now typing them right in that order and separeted only by comma;\n";
print "For example:localhost,Pathogens,sandro,xvzhs\n";
print "So, your Mysql connection settings are (type q to quit):";
while (!($db && $mysql =~ /,/) & $mysql ne "q"){
chomp($mysql = <STDIN>);
die "Ok,let's quit this work! Call me when your mind is clearer about Mysql parameters! Bye :-)\n" if $mysql eq "q";
($host,$database,$user,$password) = split (',',$mysql);
$db=Mysql->connect("$host","$database","$user","$password");
last if($db && $mysql =~ /,/);
print "\nMysql connection settings still not correct!\n";
print "Remember: host, database, user, password, separeted only by comma.\n";
print "For example:localhost,Pathogens,sandro,xvzhs\n";
print "Please, try again:";
}
print "Ok, Mysql connection to \"$database\" database was successful!\n";
}
答案 0 :(得分:2)
错误消息是正确的。您正在尝试使用名为的模块,但您从未加载它。变化
use mysql;
到
use Mysql;
使用该模块。在评论中,您在
中提到了结果Can't locate Mysql.pm in @INC
除非您有理由相信该模块已安装,否则表明需要安装 [1]
该模块曾经是DBD-mysql发行版的一部分,但它已经过时了。这是如此古老,它几年前从DBD中删除了。要获得它,您需要将您的DBD-mysql发行版降级到版本3.0008。
这是非常糟糕的事情。该脚本应该有DBI。
cjm points
由于3.0008中的Mysql.pm只是一个使用DBI的兼容层,你应该可以安装Mysql.pm&amp;来自那个旧dist的Mysql / Statement.pm以及当前的DBD-mysql。
因此,如果您从我上面链接的发行版Mysql.pm
和/usr/lib/perl5/Mysql.pm
Mysql/Statement.pm
中提取/usr/lib/perl5/Mysql/Statement.pm
,那么您应该有一个简单的无痛解决方案。
在较新版本的Perl中,错误消息已得到改进。现在的内容如下:
Can't locate Mysql.pm in @INC (you may need to install the Mysql module)