Проблема всех трех предложенных вами решений заключается в том, что модуль может быть use
d от другого модуля, и в этом случае символы следует экспортировать в пакет модуля use
ing, а не в main
. *Решение 1004 *
bvr по использованию caller
для импорта товаров непосредственно в этот пакет является важным шагом в правильном направлении, но не позволяет «реальному» пакету использовать use ShareableModules qw( foo bar baz);
для выборочного импорта только того, что ему действительно нужно.
К сожалению, для сохранения возможности выборочного импорта потребуется импортировать все соответствующие символы из базовых модулей, а затем реэкспортировать их из ShareableModules.Вы не можете просто делегировать импорт каждому базовому модулю import
(как это делает Modern::Perl
), потому что import
умирает, если его просят о символе, который не экспортируется этим модулем.Если это не проблема, то способ Modern::Perl
, вероятно, самый чистый и простой.