2009-11-09 3 views
8

В моем проекте я в настоящее время готовят шаг за шагом переход от устаревшего кода к новым, правильно спроектированным и проверенным модулям. Поскольку не каждый программист внимательно следит за тем, что я делаю, я бы хотел выпустить предупреждения, когда используется старый код. Я также предпочел бы иметь возможность выводить рекомендации о том, как переносить старый код.Как я могу пометить Perl-код как устаревший?

Я нашел два способа сделать это:

  1. Attribute::Deprecated, который отлично подходит для функций, но довольно громоздким, если полный модуль является устаревшим. Кроме того, нет дополнительной информации, кроме предупреждений.

  2. Perl::Critic::Policy::Modules::ProhibitEvilModules для модулей или, может быть, обычное правило Perl::Critic для более точной оценки на уровне функции или метода. Этот метод прекрасен, но из самого кода не сразу видно, что он устарел.

Любые другие предложения или рекомендации, как это сделать правильно и легко?

ответ

16

Для методов и функций вы можете просто заменить тело функции предупреждением и вызовом предпочтительной функции.

perl perllexwarn приводит следующий пример:

package MyMod::Abc; 

sub open { 
    warnings::warnif("deprecated", 
    "open is deprecated, use new instead"); 
    new(@_); 
} 

sub new { 
    # ... 
} 
1; 

Если вы протестующий целый модуль, поставить предупреждение в BEGIN блока в модуле.

Вы также можете поместить предупреждения в метод import (например, Win32::GUI::import): Все зависит от того, что вы хотите делать.