Ответ 1
Создание одного модуля, который загружает другие "стандартные" модули, является мотивацией для таких вещей, как perl5i и Modern::Perl.
Модули Pragma с лексическим эффектом, такие как строгие, предупреждения и autodie, просто должны быть загружены в процедуру импорта модуля. Модулям, которые экспортируют функции, нужно сказать, чтобы экспортировать их модули в другом месте, что можно сделать с помощью Import::Into. Наконец, классы просто необходимо загрузить.
Так как use
происходит во время компиляции, вам нужно выполнить эквивалент во время выполнения, который является require
модуля и вызывает его метод import
.
Вот пример включения строгих правил и предупреждений, загрузка Time:: Local и загрузка Time:: Piece, а также активизация функций say и switch.
package My::Perl;
use strict;
use warnings;
use Import::Into;
sub import {
# import is called as a class method
my $class = shift;
# The class which 'use'd this module
my $caller = caller;
# same as "use strict" but happens when import() is called.
require strict;
"strict"->import;
# use warnings;
require warnings;
"warnings"->import;
# use Time::Local;
# use Time::Piece;
Time::Local->import::into($caller);
Time::Piece->import::into($caller);
# use feature qw(say switch);
require feature;
feature->import(qw(say switch));
}
1;
Теперь вам просто нужно загрузить этот один модуль.
use My::Perl;
say localtime->year;
Не сходите с ума, вы хотите, чтобы они были в целом полезными. Глупо загружать DBI и Tk, если вы не собираетесь их использовать. Если вы хотите загрузить кучу модулей Tk, сделайте для этого отдельный модуль My:: Tk. И я бы не хотел, чтобы модули выполняли какой-либо код по той же причине.