我们在/ usr / share中有一个自定义perl安装(5.10.1),我试图安装GeoIP2的{cpan -i'here
执行此操作后,似乎安装了许多我无法跟踪的依赖项,因为我一直收到错误
Subroutine IO::Socket::INET6::sockaddr_in6 redefined at /usr/share/perl5/Exporter.pm line 67
在我们运行的大多数使用'use'命令的脚本上。我一直试图确定哪个模块最终称之为,但尚未成功。
经过一些研究,一个建议就是评论以下几行
/usr/share/perl5/IO/Socket/INET6.pm # (version 2.56, think latest is 2.72)
###commented out the following
###use Socket6 (
### qw(AI_PASSIVE inet_ntop inet_pton getaddrinfo
### sockaddr_in6 unpack_sockaddr_in6_all pack_sockaddr_in6_all)
###);
这已经阻止错误出现在各种脚本上。有谁知道这样做是否安全(即以后是否会引起更多问题),是否有更好的方法(即可以更新该模块,我猜这会导致问题并打破其他东西?)。什么是正确更新模块的最佳方法?
答案 0 :(得分:5)
这是IO :: Socket :: INET6中的一个错误,根据此bug report在版本2.69中已修复:
子程序main :: sockaddr_in6在/usr/share/perl/5.14/Exporter.pm第67行重新定义。
...
应修正在2.69。
您可以使用cpan使用命令cpan IO::Socket::INET6
从shell以root身份更新模块。
答案 1 :(得分:-1)
最简单的就是停止使用IO::Socket::INET6
。这是很久以前创建的,但是使用核心Socket
模块创建了一个更好的解决方案,即IO::Socket::IP
。此外,自从新发布的5.20以来,后一个模块现在也是核心。最好使用IO::Socket::IP
,因为这是从现在开始实现IPv4 / IPv6透明度的新核心推荐方式。