首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl未定义子例程&Net::SNMPTrapd::pack_sockaddr_in

perl未定义子例程&Net::SNMPTrapd::pack_sockaddr_in
EN

Stack Overflow用户
提问于 2013-01-29 11:26:43
回答 1查看 587关注 0票数 0

我正在尝试使用Net::SNMPTrapd附带的示例脚本,但它在套接字例程上失败。我的代码:

代码语言:javascript
复制
#!/usr/bin/perl
use Net::SNMPTrapd;

my $snmptrapd = Net::SNMPTrapd->new()
  or die "Error creating SNMPTrapd listener: ", Net::SNMPTrapd->error;

while (1) { 
    my $trap = $snmptrapd->get_trap();

    if ( !defined($trap) ) {
        printf "$0: %s\n", Net::SNMPTrapd->error;
        exit 1 
    } elsif ( $trap == 0 ) {
        next
    } 

    if ( !defined( $trap->process_trap() ) ) {
        printf "$0: %s\n", Net::SNMPTrapd->error
    } else { 
        printf "%s\t%i\t%i\t%s\n",
          $trap->remoteaddr,
          $trap->remoteport,
          $trap->version,
          $trap->community
    } 
} 

当我运行此命令并从我的思科路由器向其发送v2陷阱时,它只是转储:

代码语言:javascript
复制
Undefined subroutine &Net::SNMPTrapd::pack_sockaddr_in called at /usr/local/share/perl/5.14.2/Net/SNMPTrapd.pm line 554.

有人能告诉我怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-29 11:43:41

代码语言:javascript
复制
use Socket qw(inet_ntoa AF_INET IPPROTO_TCP);

应该是

代码语言:javascript
复制
use Socket qw(inet_ntoa AF_INET IPPROTO_TCP pack_sockaddr_in);

解决方法

变化

代码语言:javascript
复制
use Net::SNMPTrapd;

代码语言:javascript
复制
use Net::SNMPTrapd;
BEGIN {
   *Net::SNMPTrapd::pack_sockaddr_in = \&Socket::pack_sockaddr_in
      if !defined(&Net::SNMPTrapd::pack_sockaddr_in);
}

即使模块的作者得到了修复,这也不会中断(在您将其mention给他之后...)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14575180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档