我想知道是否有人可以通过旧的Perl代码帮助我解决令人沮丧的问题。我的实际任务是将旧的perl脚本从5.10.1版本迁移到5.18.2。

所以我已经用脚本完成了简单的问题,例如错误的调用,格式错误等。

但是我停留在一个名为fetchhash的函数上,似乎就像fetchrow_hashref;一样。

我打算捕获IP,名称服务器ID和名称的列表。我的问题是,函数fetchrow_hashref不会像旧代码中的fetchhash一样执行相同的操作。

请参阅以下新代码:

        #fetch_network();
        $res2=$dbh->prepare("select nsip,nsid,nsname from nameservers");
        $res2->execute();

        while (%ns2=$res2->fetchrow_hashref;{
            $nsips{$ns2{nsid}}=$ns2{nsip};
            $nsnames{$ns2{nsid}}=$ns2{nsname};
        }


该表如下所示:

+-----------------+------+------------------------------+
| nsip            | nsid | nsname                       |
+-----------------+------+------------------------------+
| 101.101.111.10  |    1 | ns1.yournameserver.net       |


这是旧代码的一部分:

$res2=$dbh->query("select nsip,nsid,nsname from nameservers");
while (%ns2=$res2->fetchhash)
{
$nsips{$ns2{nsid}}=$ns2{nsip};
$nsnames{$ns2{nsid}}=$ns2{nsname};
}


所以我尝试了fetchrow_hashref,但对我没有用:

main::(nsconfgen.pl:170):               while (%ns2=$res2->fetchrow_hashref){
DB<193> n
Reference found where even-sized list expected at nsconfgen.pl line 170.
at nsconfgen.pl line 170.
main::(nsconfgen.pl:171):                     $nsips{$ns2{nsid}}=$ns2{nsip};
DB<193> p $ns2{nsid}

( i've get no value from the hash )


当然,我已经爬过Google了,我尝试了很多例子,但没有任何帮助。

所以我希望我能在这里得到一些帮助。

非常感谢你!

最佳答案

DBI实现者中,fetchrow_hashref的返回值是对哈希的引用,而不是哈希。对代码进行一些更改将使其正确:

    while ($ns2=$res2->fetchrow_hashref) {
        $nsips{$ns2->{nsid}}=$ns2->{nsip};
        $nsnames{$ns2->{nsid}}=$ns2->{nsname};
    }

关于mysql - fetchrow_hashref还是fetchhash?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36358911/

10-09 06:10