Те, кто активно пользуются версией Perl 5.10, каждый раз пишут в начале файла инструкцию use v5.10 (в разных вариантах) или use Modern::Perl.
Брок Вилкокс создал (еще в августе 2009-го) модуль-прагму everywhere, и в документации прямо пишет о том, что сделал это для того, чтобы не писать надоедливые use 5.010.
Если вставить инструкцию everywhere до подключения других модулей, то ее аргумент автоматически превращается в соответсвующий вызов use внутри подключенных файлов.
use everywhere q(feature ':5.10');
use MyModule;MyModule->my_sub($$);
Соответственно, внутри MyModule.pm теперь возможно использовать фичи 5.10:
package MyModule;
sub my_sub {
say $_[1];
}1;
Помимо 5.10 удается подключать и любые другие модули и прагмы. В документации, к примеру, упомянут вариант
use everywhere 'MooseX::Declare';
При попытке написать
use everywhere 'v5.10';
или
use everywhere '5.10.1';
появляется предупреждение о том, что v-string in use/require non-portable. Это удается обойти, написав переносимую (хотя и менее понятную человеку) конструкцию
use everywhere '5.010';
В качестве шутки можно избавиться от предупреждения и таким образом:
use v5.10;
use everywhere 'v5.10';
In a project I have, all the packages for the project are in the EPFarms:: namespace. So the main EPFarms.pm module contains this:
and then each individual package within that namespace gets 5.10 goodness and MooseX::Declare. So individual packages start right off with declaring their class -- no other header mumbo jumbo (not even a use strict!) at the top of every single file. Fun!
I think that 'everywhere' could use a few improvements. For one, it seems that you can only use it once (hence my use of the ; in the above example) :)
Возможно это удобно, если вы пишите и код и модули. Но я бы не стал в реальном проекте это использовать, т.к. это нарушает инкапсуляцию модулей. Теперь что бы использовать модуль я всегда должен писать use everywhere. Ситуация усложняется если модуль в данный момент не использует 5.10 фичи, и вы забыли написать everywhere в скрипте. А потом кто-то добавляет 5.10 фичу в модуль, и скрипт начинает падать. Этого можно легко избежать, если в каждом модуле явно указывать его зависимости.
Обилие подобных модулей говорит, что "маразм крепчает".
use 5.010. писать надоело, а use everywhere q(feature ':5.10'); - не надоест. Странно. Стоит настроить редактор, а не плодить кучу модулей.