2012-06-06 6 views
12

источники Анализа модулей CPAN я могу увидеть что-то вроде этого:Почему ключевое слово "package" иногда разделяется комментарием от имени пакета?

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

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

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

+2

Наверное, какой-то странный хак, чтобы скрыть упрямый пакет с [Загружающего сервера авторов Perl] (http://pause.perl.org/pause/query?ACTION = pause_04about), чтобы избежать какой-либо обработки PAUSE, которая, вероятно, не будет иметь для вас значения, если вы не собираетесь загружать какой-то взломанный пакет в CPAN, что, вероятно, хорошее время, чтобы узнать, почему люди это делают. Другими словами, я понятия не имею. :) – Lumi

+0

Просто посмотрел на страницу со своей ссылки, и я полагаю, что ваша точка очень близка к истине :). Кажется, это какая-то скрытая от автоматической обработки. Вероятно, человек, ответственный за Perl, должен рассказать нам всю историю, почему и когда он используется/не используется. – ArtM

+1

Сам комментарий не имеет никакого эффекта; Это разрыв строки. – ikegami

ответ

21

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

Когда дистрибутив загружается в ПАУЗА, индексщик будет проверять каждый файл в загружаемом файле, ища имена пакетов, которые включены в дистрибутив. Любые индексированные пакеты могут отображаться в результатах поиска 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), которые не следует индексировать.

+1

Оказывается, это именно такой хитроумный взлом, который я так и думал. Подобно сценарию базовой оболочки, который связывает весь магазин вместе, и он не редактировался в течение двадцати лет. – Lumi

+0

Спасибо. У меня было предположение, что это должно быть каким-то образом связано не с самим языком, а с тем, кто знает, какие скрытые бит Perl имеет. – ArtM

-3

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

+1

Честно говоря, нет, не так много. Ответ толпы имеет смысл. Пауза - это FOSS, кстати, см. Pause.perl.org. – tsee

Смежные вопросы