UPDATE
Теперь, когда OP прояснил свои потребности, это действительно должно быть сделано способом, аналогичным тому, что делает Exported, если быть точным, путем вставки вспомогательной ссылки в пространство имен вызывающей стороны посредством назначения glob. Пример:
###############################################
package ImportRenamer;
use strict;
sub import_me {
print "I am a cool importer\n";
}
sub import {
my ($callpkg)=caller(0);
print "Setting ${callpkg}::import to ImportRenamer::import_me\n";
no strict "refs";
*{$callpkg."::import"} = \&ImportRenamer::import_me; # Work happens here!!!
use strict "refs";
}
1;
###############################################
package My;
use strict;
use ImportRenamer;
1;
###############################################
package My2;
use strict;
use ImportRenamer;
1;
###############################################
И тест:
> perl -e '{ package main; use My; use My2; 1;}'
Setting My::import to ImportRenamer::import_me
I am a cool importer
Setting My2::import to ImportRenamer::import_me
I am a cool importer
ОРИГИНАЛЬНЫЙ ОТВЕТ
Вам не нужно делать ничего особенного, кроме вызова метода импорта "import
". use
уже звонит import()
, см. использование perldoc :
use Module LIST
Импортирует некоторую семантику в текущий пакет из названного модуля,
как правило, путем псевдонимов определенных подпрограмм или имен переменных в ваш пакет.
Это в точности эквивалентно:
BEGIN { require Module; Module->import( LIST ); }