Как я могу пометить код Perl как устаревший? - PullRequest
8 голосов
/ 09 ноября 2009

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

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

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

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

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

1 Ответ

16 голосов
/ 09 ноября 2009

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

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 ): все зависит от того, что именно вы хотите сделать.

...