我正在使用一个需要与perl接口的新程序。
示例代码表明所有方法都将导出到全局命名空间,如下所示:
use BGPmon::Fetch;
my $ret = init_bgpdata();
my $ret = connect_bgpdata();
my $xml_msg = read_xml_message();
...
然而,使用任何类似的方法会导致" Undefined subroutine &Fetch::init_bgpdata
。"我知道模块有效,但似乎没有正确导出,因为我仍然可以使用长名称:BGPmon::Fetch::init_bgpdata();
。
模块没有正确导出的原因是什么?
注意:我很乐意分享方法代码,但我知道它不是模块的问题。它是我无法分享的代码集的一部分,我知道它可行,因为测试设法通过。
require Exporter;
our $AUTOLOAD;
our @ISA = qw(Exporter);
our %EXPORT_TAGS = ( 'all' => [ qw(connect_bgpdata read_xml_message
close_connection is_connected messages_read uptime connection_endtime
get_error_code get_error_message get_error_msg) ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
Public source code(我的是开发者)
答案 0 :(得分:2)
在您提供的代码中,您正在定义代码:all
所以你调用代码可以做到
use BGPmon::Fetch ':all' ;
您也可以单独导入
use BGPmon::Fetch qw(init_bgpdata connect_bgpdata); # and so on
值得看看Exporter - 如果已经这样做了道歉