Ваша проблема в том, что вы используете имя файла как пустое слово, поэтому Perl интерпретирует его как имя пакета.Поскольку .
не является символом допустимого идентификатора (символ, который вы можете использовать в имени пакета), вы получите это предупреждение.
Если вы хотите использовать имя файла, используйте вместо него строку:
require 'file.pl';
Затем при вызове Test::MockModule
он ожидает имя пакета, который вы определили в file.pl , а не имя файла.
НадеюсьЯ не знаю, что вы делаете, но когда я хочу заменить определение подпрограммы, я просто переопределяю это.Это суть идеи, и есть способы сделать это временно.Код интерфейсов, таких как Test::MockModule
и Hook::LexWrap
, не так уж и сложен:
BEGIN {
require 'file.pl';
package Some::Package;
no warnings 'redefine';
*get_name = sub { ... }
}
Глобус (*get_name
) немного сложен, но почти все остальное уже отображается втвой пример.Я показываю некоторые из этих приемов в Эффективном программировании на Perl .Для моей работы сокращение списка зависимостей модуля (особенно в тестах) часто стоит продвинутого трюка.