Как я могу пометить код Perl как устаревший?

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

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

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

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

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


person Nikolai Prokoschenko    schedule 09.11.2009    source источник


Ответы (1)


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

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

person Sinan Ünür    schedule 09.11.2009