2012-06-06 10 views
12

fuentes Análisis de módulos CPAN puedo ver algo como esto:¿Por qué la palabra clave "paquete" a veces está separada por un comentario del nombre del paquete?

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

Obviamente, es tomado de Try::Tiny, pero he visto este tipo de comentarios entre package palabra clave y el identificador de paquete en otros módulos también.

¿Por qué se usa este procedimiento? ¿Cuál es su objetivo y qué beneficios tiene?

+2

Probablemente algún truco para esconder el paquete shacky del [servidor de carga Perl Authors] (http://pause.perl.org/pause/query?ACTION = pause_04about) para evitar algunos procesamientos PAUSE que probablemente no le importen a menos que tenga la intención de cargar algún paquete hacky a CPAN, que probablemente sea un buen momento para aprender por qué las personas lo hacen. En otras palabras, no tengo ni idea. :) – Lumi

+0

Acabo de mirar la página desde su enlace y supongo que su punto está muy cerca de la verdad :). Parece ser una especie de escondite del procesamiento automático. Probablemente un autor de Perl debe contarnos la historia completa por qué y cuándo se usa/no se usa. – ArtM

+1

El comentario en sí no tiene ningún efecto; Es el salto de línea lo que hace. – ikegami

Respuesta

21

De hecho, es un truco para ocultar un paquete del indexador de PAUSE.

Cuando una distribución se carga en PAUSE, el indexador examinará cada archivo en la carga, buscando los nombres de los paquetes que se incluyen en la distribución. Cualquier paquete indexado puede aparecer en los resultados de búsqueda de CPAN.

Existen muchas razones para no querer que el indexador descubra sus paquetes. Su distribución puede tener muchos paquetes pequeños o insignificantes que podrían complicar los resultados de búsqueda de su módulo. Puede tener paquetes definidos en su directorio t (prueba) o algún otro directorio no estándar que no estén destinados a instalarse como parte de la distribución. Su distribución puede incluir archivos de una distribución completamente diferente (que alguien más escribió).

El truco funciona porque el indexador busca estrictamente la palabra clave package y una expresión que se parece a un nombre de paquete en la misma línea.

Hoy en día, puede incluir un archivo META.yml con su distribución. El indexador PAUSE buscará y respetará una especificación no_index en este archivo. Pero esta es una capacidad relativamente nueva del indexador, por lo que los módulos más antiguos y los colaboradores de CPAN antiguos seguirán utilizando el corte de línea.

Aquí está un ejemplo de una especificación de no_index de Forks::Super

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

Sys::CpuAffinity y Signals::XSIG son distribuciones separadas que también están empaquetados con Forks::Super. Algunos de los scripts de prueba contienen package declaraciones (por ejemplo, Arbitrary::Test::Package) que no deben indexarse.

+1

Resulta ser exactamente el tipo de truco loco que pensé que era. Como el guión de shell fundamental que une a toda la tienda y que no se ha editado durante veinte años. – Lumi

+0

Gracias. Tenía la suposición de que debería estar relacionado de alguna manera no con el lenguaje en sí, sino quién sabe qué bits ocultos tiene Perl. – ArtM

-3

Bien, aquí hay otra oportunidad para este fenómeno ... He estado pirateando a Perl durante una docena de años y rara vez he visto este truco y posiblemente simplemente lo ignoré y nunca me molesté en investigarlo. Una cosa parece clara, sin embargo. En PAUSE se está llevando a cabo un proceso tedioso en la buena escuela de pensamiento Perl'n'UNIX que sin lugar a dudas implica el análisis de texto orientado a la línea, por lo que analiza esos archivos Perl, posiblemente incluso usando grep, sino más bien perl, quién sabe, para extraer los nombres de los paquetes y luego dar un puntapié a algún procedimiento o obtener algunas estadísticas o lo que sea. Y para tropezar con este procedimiento y modificar sus formas, el autor divide la declaración del paquete en dos líneas para que el hacky packy grep no tenga ni idea de que hay un paquete declarado justo debajo de sus narices y el programador está contento con sus hacky skills y las estadísticas PAUSE o lo que sea que están improvisando son como deberían ser. ¿Tiene sentido?

+1

Honestamente, no, no mucho. la respuesta de la mafia tiene sentido. PAUSE es FOSS, por cierto, vea pause.perl.org. – tsee

Cuestiones relacionadas