此错误是什么意思:“导入程序未由导出程序模块导出”?

时间:2018-10-30 23:38:31

标签: perl

正如标题所述,尝试使用我的perl模块时出现此错误,但是我不知道这意味着什么,而且我似乎在互联网上找不到任何明确的结果。我的代码包含3个文件:一个使用模块(MyLib.pm)的脚本(myApp.pl),该模块又使用另一个模块(Secret.pm)。这里是它们的全部:

myApp.pl

const myAppReq = http.request(options, (myAppRes) =>{
    myAppRes.on('data', (chunk) => {
      res.write(chunk);
    });
    myAppRes.on('end', () => {
      res.end();
    });
});

MyLib.pm

#!/path/to/perl

my $version = "1.0.0";

use warnings;
use strict;
use Testing::MyLib;

Secret.pm

package Testing::MyLib;

use strict;
use warnings;

use Testing::Secret;

它们退出此文件结构:

package Testing::Secret;

use strict;
use warnings;

use Exporter qw( import );
our @EXPORT = ();
our %EXPORT_TAGS = (
  'all' => [ qw( MY_CONSTANT )]
);
our @EXPORT_OK = (
  @{ $EXPORT_TAGS{all}}
);

use constant MY_CONSTANT => 'bla bla bla';

错误消息的详细信息是:

/bin/myApp.pl
/lib/perl/Testing/MyLib.pm
/lib/perl/Testing/Secret.pm

1 个答案:

答案 0 :(得分:6)

<link href="https://unpkg.com/leaflet@1.3.4/dist/leaflet.css" rel="stylesheet" /> <script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://unpkg.com/leaflet.gridlayer.googlemutant@latest/Leaflet.GoogleMutant.js"></script> <div class="map-container" id="mapid"></div> <ul class="plot"> <li class="markers" data-lattitude="-40.99497" data-longitude="174.50808">Text 1</li> <li class="markers" data-lattitude="-41.30269" data-longitude="173.63696">Text 2</li> <li class="markers" data-lattitude="-41.49413" data-longitude="173.5421">Text 3</li> <li class="markers" data-lattitude="-40.98585" data-longitude="174.50659">Text 4</li> <li class="markers" data-lattitude="-40.93163" data-longitude="173.81726">Text 5</li> </ul> requests,Exporter在模块的命名空间中导出(创建)use Exporter qw( import );。这是处理从模块中导出请求的方法。早于5.57的Exporter版本无法识别此请求,从而导致您收到错误消息。

自从Perl 5.8.3以来,Exporter 5.57或更高版本已与Perl捆绑在一起,因此您必须具有相当古老的Perl版本和模块!

您可以升级Exporter,也可以从Exporter继承import,这虽然有点麻烦,但可以与任何版本的Exporter一起使用。

import