Экспорт
Вручную вызывать @EXPORT = () вещи становятся немного изможденными.
package Bar;
use strict;
use warnings;
use Sub::Exporter -setup => {
exports => [qw[ foo ]],
groups => {
default => [qw[ foo ]],
}
};
sub foo(){
};
1;
Использование:
use strict;
use warnings;
use Bar foo => { -as-> 'Foo' };
Sub :: Exporter может делать много удивительных вещей, таких как экспорт групп, исключение групп, методы компоновщика (т. Е. Как подпрограммы, которые он экспортирует, определяются переданными параметрами, а подпрограммы генерируются внутри других подпрограмм и т. Д.) 1009 *
переименование
Для переименования вещей может быть лучше иметь вторичную функцию, которая просто выступает в качестве унаследованной функции, которую Carp () вызывает при вызове, чтобы рекомендовать код, указывающий на нее везде, для перемещения в новый метод. Это увеличит согласованность всего кода.
Затем, когда ваши тесты перестают выдавать предупреждения, вы можете удалить устаревшую функцию.
sub old { # line 1
Carp::carp('Legacy function \'old\' called, please move to \'newmethod\' ');
goto &newmethod; # this passes @_ literally and hides itself from the stack trace.
} # line 4
sub newmethod { # line 6
Carp::cluck('In New Method');
return 5;
} # line 9
print old(), "\n"; # line 11
Legacy function 'old' called, please move to 'newmethod' at code.pl line 2
main::old() called at code.pl line 11
In New Method at code.pl line 7
main::newmethod() called at code.pl line 11
5
Обратите внимание, как предупреждения в newmethod выглядят так же, как они были вызваны напрямую.