Подтвердить что ты не робот

Почему ключевое слово "package" иногда разделяется комментарием из имени пакета?

Анализ источников модулей CPAN Я могу видеть примерно следующее:

...
package # hide from PAUSE
   Try::Tiny::ScopeGuard;
...

Очевидно, это взято из Try::Tiny, но я видел такие комментарии между package ключевым словом и идентификатором пакета в других модулях тоже.

Почему эта процедура используется? Какова его цель и какие выгоды она имеет?

4b9b3361

Ответ 1

Это действительно взломать, чтобы скрыть пакет от индексатора PAUSE.

Когда дистрибутив загружается в ПАУЗА, индексщик будет проверять каждый файл в загружаемом файле, ища имена пакетов, которые включены в дистрибутив. Любые индексированные пакеты могут отображаться в результатах поиска CPAN.

Есть много причин не желать, чтобы индексир обнаруживал ваши пакеты. В вашем дистрибутиве может быть много небольших или незначительных пакетов, которые будут загромождать результаты поиска для вашего модуля. У вас могут быть пакеты, определенные в вашем каталоге t (test) или в другом нестандартном каталоге, которые не предназначены для установки как часть дистрибутива. В вашем дистрибутиве могут быть файлы из совершенно другого дистрибутива (который кто-то еще написал).

Хак работает, потому что индексист строго ищет ключевое слово package и выражение, которое выглядит как имя пакета в той же строке.

В настоящее время вы можете включить файл META.yml с вашим дистрибутивом. Индексатор PAUSE будет искать и уважать спецификацию no_index в этом файле. Но это относительно новая возможность индексатора, поэтому более старые модули и вкладчики CPAN старого таймера будут по-прежнему использовать взломанный разрыв строки.

Вот пример спецификации no_index из Forks::Super

no_index:
    directory:
        - t
        - inc
    package:
        - Sys::CpuAffinity
        - Signals::XSIG
        - Signals::XSIG::Default
        - Signals::XSIG::TieArray56

Sys::CpuAffinity и Signals::XSIG являются отдельными дистрибутивами, которые также упакованы с помощью Forks::Super. Некоторые тестовые скрипты содержат объявления package (например, Arbitrary::Test::Package), которые не следует индексировать.

Ответ 2

Хорошо, здесь еще один выстрел в этом явлении... Я был ужасным взломом Perl в течение дюжины лет, и я редко видел этот упакованный взломать и, возможно, просто игнорировался и никогда не потрудился расследовать. Однако одно кажется ясным. В PAUSE появилась хакерская обработка, созданная в хорошей мысли о Perl'n'UNIX, которая, без тени сомнения, включает в себя линейно-ориентированный синтаксический анализ текста, поэтому они анализируют эти файлы Perl, возможно, даже используя grep, а скорее perl сам, кто знает, чтобы извлечь имена пакетов, а затем ударить какую-то процедуру или получить некоторую статистику или еще что-то. И, чтобы разобраться в этой процедуре и взломать ее пути, автор разбивает декларацию пакета на две строки, поэтому в хакерской пакетной grep-задаче нет подсказки, что пакет объявлен прямо под носом, а программист рад своим хакерским навыкам и статистика ПАУЗА, или что бы то ни было, они собираются вместе, как и должно быть. Это имеет смысл?