关于mysql的Perl问题:找不到对象方法" connect"并且不能使用字符串("")作为HASH

时间:2015-01-13 21:30:08

标签: mysql perl

我目前正在尝试运行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";
}

1 个答案:

答案 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,那么您应该有一个简单的无痛解决方案。


  1. 在较新版本的Perl中,错误消息已得到改进。现在的内容如下:

    Can't locate Mysql.pm in @INC (you may need to install the Mysql module)