На самом деле нет необходимости, чтобы их пользовательский код находился в файлах, соответствующих именам пакетов, и, следовательно, заменял или должен был взаимодействовать с его загрузкой из @INC
. Вы можете просто организовать загрузку пользовательского кода после другого файла, который все еще изменяет исходные пакеты. Конечно, это должно произойти до любого импорта из этого пакета, и вы захотите отключить redefine
предупреждений в таком файле.
# Whatever.pm
package Some::Module;
use strict;
use warnings;
no warnings 'redefine';
sub foo { ... }
Переопределения могут даже использовать Class :: Method :: Модификаторы , которые способны заменить сабы на место оберткой, даже если не задействованы никакие классы или методы.
use Class::Method::Modifiers;
around 'Some::Module::foo' => sub { ... };
Самый большой молот, если вы действительно не хотите изменять существующие файлы любым способом могут быть настроены на сайте, что описано здесь , или App :: My Perl, что является несколько более сфокусированной версией этого.