Как включить файл, содержащий все необходимые имена модулей Perl?

Скрипты perl содержат все имена модулей в начале script.

Пример:

use strict;
use XML::Parser;
use XML::Simple;
use DBI;
use DBD::DB2::Constants;
use POSIX qw( strftime );
use Storable qw(dclone);
use Data::Dumper;
use Carp;

Как сохранить все имена модулей в другом файле и включить файл в основной файл perl script?

Спасибо.

Ответ 1

Создайте свой собственный модуль. Но если вы сделаете пакет в этом модуле, те strftime и т.д. Будут импортированы в другое пространство имен. Вы можете сделать litle hack, чтобы сделать этот smiple:

MyModules.pm:

use strict;
use XML::Parser;
use XML::Simple;
use DBI;
use DBD::DB2::Constants;
use POSIX qw( strftime );
use Storable qw(dclone);
use Data::Dumper;
use Carp;

Обратите внимание, что в этом .pm не было ключевого слова package. Ваш script:

use MyModules;

Поместите этот .pm в тот же каталог с script или добавьте путь поиска модулей во время выполнения:

use lib '/my_modules_dir/';
use MyModules;

Использование команд do и требуется не рекомендуется, так как они не проверяют синтаксис при запуске script. Конечно, вы можете поместить их в блок BEGIN, но я думаю, что его сложный способ и вообще BEGIN{ require ..} совпадает с use

UPD: ikegami отметил, что проблема не работает, когда вы используете это из многих модулей. Независимо от информации о стартовой задаче (он хочет использовать ее из основного script), плохо добавьте информацию о том, как использовать это из многих модулей, чтобы мой друг мог чувствовать себя лучше. Добавить в конец MyModules.pm:

delete $INC{'MyModules.pm'};
1;

Ответ 2

Вы можете использовать

BEGIN { do 'filename.pl' or die [email protected] }

См. do. Обязательно включите 1; в нижней части файла.

Ответ 3

Вы можете посмотреть модуль Toolkit.