Мне нравится идея сокращения кода, но я глубоко подозрительно отношусь к таким инструментам, как Modern :: Perl и common :: sense.
Проблема, с которой я сталкиваюсь с такими модулями, заключается в том, что они связывают группу поведений и скрывают здесь имена бойцов с изменяемыми значениями.
Например, Modern::Perl
сегодня состоит из включения некоторых функций perl 5.10 и использования строгих правил и предупреждений. Но что происходит, когда в Perl 5.12, 5.14 или 5.24 появляются отличные новинки, и сообщество обнаруживает, что нам нужно везде использовать прагму frobnitz
? Будет ли Modern :: Perl обеспечивать согласованный набор поведений или он останется «современным». Если MP идет в ногу со временем, это сломает существующие системы, которые не идут в ногу со своими требованиями к компилятору. Это добавляет дополнительное тестирование совместимости для обновления. По крайней мере, это моя реакция на депутата. Я буду первым, кто признает, что chromatic примерно в 10 раз умнее меня, а также лучшим программистом - но я все еще не согласен с его мнением по этому вопросу.
common::sense
также имеет проблему с именем. Чья это идея здравого смысла? Это изменится со временем?
Я бы предпочел, чтобы модуль облегчал мне создание собственного набора стандартных модулей и даже создание групп связанных модулей / прагм для конкретных задач (таких как манипуляции с датой и временем, взаимодействие с базой данных, анализ html и т. Д.). ).
Мне нравится идея Toolkit , но он отстой по нескольким причинам: он использует фильтры источников, а макросистема слишком сложна и хрупка. Я испытываю огромное уважение к Дамиану Конвею, и он создает великолепный код, но иногда он заходит слишком далеко (по крайней мере, для производственного использования, эксперименты хороши).
Я не потерял достаточно времени, набрав use strict; use warnings;
, чтобы почувствовать необходимость создания собственного стандартного модуля импорта. Если бы я почувствовал острую потребность в автоматической загрузке набора модулей / прагм, то было бы идеально, если бы что-то похожее на Toolkit, позволяющее создавать стандартные группы объектов:
use My::Tools qw( standard datetime SQLite );
или
use My::Tools;
use My::Tools::DateTime;
use My::Tools::SQLite;
Инструментарий очень близок к моему идеалу. Его роковые недостатки - облом.
Что касается того, имеет ли выбор прагмы смысл, это вопрос вкуса. Я бы предпочел использовать случайные no strict 'foo'
или no warnings 'bar'
в блоке, где мне нужна возможность сделать что-то, что требует этого, чем отключить проверки для всего моего файла. Плюс ИМО, потребление памяти это красная селедка. YMMV.
обновление
Кажется, что существует много (сколько?) Различных модулей этого типа, плавающих вокруг CPAN.
- Существует последний , который больше не является последним. Демонстрирует часть проблемы именования.
- Кроме того, uni :: perl , который добавляет разрешающую юникодную часть микса.
- ToolSet предлагает подмножество способностей
Toolkit
, но без исходных фильтров.
- Я включу сюда Moose , поскольку он автоматически добавляет
strict
и warnings
в вызывающий пакет.
- И наконец Acme :: Very :: Modern :: Perl
Распространение этих модулей и потенциал для перекрывающихся требований добавляет еще одну проблему.
Что произойдет, если вы напишите код вроде:
use Moose;
use common::sense;
Какие прагмы включены с какими параметрами?