Что означает эта ошибка: «импорт не экспортируется модулем экспорта»? - PullRequest
0 голосов
/ 31 октября 2018

Как гласит заголовок, я получаю эту ошибку при попытке использовать мой модуль perl, но я понятия не имею, что это значит, и я не могу найти какие-либо четкие результаты в Интернете. Мой код состоит из 3 файлов: сценария (myApp.pl), который использует модуль (MyLib.pm), который, в свою очередь, использует другой модуль (Secret.pm). Вот они во всей их полноте:

myApp.pl

#!/path/to/perl

my $version = "1.0.0";

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

MyLib.pm

package Testing::MyLib;

use strict;
use warnings;

use Testing::Secret;

Secret.pm

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

А подробности сообщения об ошибке:

[user@pc ~]$ myApp.pl
"import" is not exported by the Exporter module at /###/lib/perl/Testing/Secret.pm line 6
Can't continue after import errors at /###/lib/perl/Testing/Secret.pm line 6
BEGIN failed--compilation aborted at /###/lib/perl/Testing/Secret.pm line 6.
Compilation failed in require at /###/lib/perl/Testing/MyLib.pm line 6.
BEGIN failed--compilation aborted at /###/lib/perl/Testing/MyLib.pm line 6.
Compilation failed in require at /###/bin/myApp.pl line 7.
BEGIN failed--compilation aborted at /###/bin/myApp.pl line 7.

1 Ответ

0 голосов
/ 31 октября 2018

use Exporter qw( import ); запрашивает , что Экспортер экспортирует (создает) import в пространстве имен вашего модуля. Это метод, который обрабатывает запросы на экспорт из вашего модуля. Версии Exporter старше 5.57 не распознают этот запрос, что приводит к полученному вами сообщению об ошибке.

Поскольку Exporter 5.57 или новее был включен в Perl начиная с Perl 5.8.3, у вас должна быть довольно древняя версия Perl и модуль!

Вы можете обновить Exporter или наследовать import от Exporter, который немного сложнее, но работает с любой версией Exporter.

package MyPackage;
use strict;
use warnings;
use Exporter;
our @ISA = 'Exporter';
our @EXPORT_OK = ...;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...