The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NOMBRE

perlsource - Guía del árbol de código fuente de Perl

DESCRIPCIÓN

En este documento se describe el contenido del árbol de código fuente de Perl. En él encontrará toda la información necesaria para «hackear» el núcleo de Perl.

ORIENTACIÓN

El árbol de código fuente de Perl es frondoso. Contiene cosas como:

Código C

La mayor parte del código C y los archivos de encabezado se encuentran en el directorio raíz del árbol de código fuente. Hay algunos directorios específicos de la plataforma que contienen código C. Además, algunos de los módulos distribuidos con Perl incluyen código C o XS.

En perlinterp encontrará más información sobre los archivos que integran el intérprete de Perl y detalles sobre el funcionamiento del intérprete.

Módulos integrados en el núcleo

Los módulos distribuidos como parte del núcleo de Perl se encuentran en cuatro subdirectorios. Dos de estos directorios contienen módulos integrados en el núcleo y los otros dos contienen módulos que además se publican en CPAN. Los módulos que se pueden publicar en CPAN se denominan módulos de «evolución dual».

  • lib/

    Este directorio contiene módulos programados en Perl puro que solo se publican como parte del núcleo. A diferencia de otros módulos del núcleo, este directorio contiene todos los módulos y sus pruebas.

  • ext/

    Al igual que lib/, este directorio contiene módulos que solo se publican como parte del núcleo. Sin embargo, a diferencia de lib/, un módulo de ext/ suele tener una estructura de directorios y archivos estilo CPAN, así como su propio archivo Makefile.PL. No se espera que un módulo de ext/ pueda trabajar con versiones anteriores de Perl 5. Por esta razón, estos módulos pueden beneficiarse de las mejoras sintácticas y de otro tipo incluidas en la rama blead de Perl 5.

  • dist/

    Este directorio contiene módulos de evolución dual en los que la versión canónica es la del código fuente de la rama blead. Tenga en cuenta que es posible que algunos de los módulos de este directorio aún no se hayan publicado por separado en CPAN. Los módulos de dist/ deberían poder trabajar con versiones anteriores de Perl 5.

  • cpan/

    Este directorio contiene módulos de evolución dual en los que el módulo de CPAN es la versión canónica. No debe aplicar parches a estos módulos directamente. Los cambios realizados en estos módulos deben enviarse al mantenedor del módulo de CPAN. Cuando se hayan aplicado y publicado estos cambios, la nueva versión del módulo se incorporará al núcleo.

Para algunos módulos de evolución dual aún no se ha determinado si la versión canónica es la de CPAN o la del código fuente de la rama blead. Mientras no se determine, estos módulos deben estar en cpan/.

Pruebas

Existe un completo conjunto de pruebas del núcleo de Perl. Si agrega pruebas nuevas (o módulos nuevos con pruebas), es posible que tenga que actualizar el archivo t/TEST para que se ejecuten.

  • Pruebas de módulos

    Las pruebas de los módulos del núcleo del directorio lib/ se encuentran junto al módulo correspondiente. Por ejemplo, tenemos lib/strict.pm y lib/strict.t.

    Las pruebas de los módulos de ext/ y los módulos de evolución dual están en los subdirectorios t/ de cada módulo, como en una distribución de CPAN estándar.

  • t/base/

    Pruebas de funcionalidad básica de Perl. Incluyen pruebas de if, operaciones básicas de lectura y escritura, expresiones regulares sencillas, etc. Son las primeras que se ejecutan del conjunto de pruebas; si no se supera alguna de estas pruebas, significa que hay un problema grave.

  • t/cmd/

    Pruebas de estructuras de control básicas, if/else, while, subrutinas, etc.

  • t/comp/

    Pruebas de problemas básicos relacionados con la manera en que Perl se analiza y compila.

  • t/io/

    Pruebas de funciones de E/S predefinidas, incluidos los argumentos de línea de comandos.

  • t/mro/

    Pruebas de las implementaciones de orden de resolución de métodos de perl (vea mro).

  • t/op/

    Pruebas de funciones predefinidas de perl que no se corresponden con ninguno de los demás directorios.

  • t/opbasic/

    Pruebas de funciones predefinidas de perl que, al igual que las de t/op/, no se corresponden con ninguno de los demás directorios y que, además, no pueden usar t/test.pl, ya que ese programa depende de funcionalidad que el mismo archivo de prueba está comprobando.

  • t/re/

    Pruebas de funciones o comportamientos relacionados con expresiones regulares (antes estaban en t/op).

  • t/run/

    Pruebas de las características de funcionamiento de perl, incluidos los códigos de salida y el control de las variables de entorno PERL*.

  • t/uni/

    Pruebas de compatibilidad básica con Unicode.

  • t/win32/

    Pruebas específicas de Windows.

  • t/porting/

    Pruebas que detectan diversos errores comunes en el árbol de código fuente. Por ejemplo, comprueban que todas las personas que figuran en el registro de git tienen una entrada correspondiente en el archivo AUTHORS.

  • t/lib/

    Antiguo directorio de las pruebas de módulos. No debe colocar nada aquí. Aún quedan cosas que deben moverse a otra parte. ¿Se anima a moverlas? Se lo agradeceremos...

Documentación

Toda la documentación principal para usuarios finales se encuentra en pod/. En general, los módulos individuales de lib/, ext/, dist/ y cpan/ tienen su propia documentación, ya sea en el archivo Módulo.pm o en un archivo Módulo.pod adjunto.

Por último, la documentación para programadores del núcleo de Perl se encuentra en el directorio Porting/.

Herramientas y documentación para «hackear»

El directorio Porting contiene un conjunto de fragmentos de código y documentación que pueden servir de ayuda a los mantenedores de Perl. Algunos elementos destacados son:

  • check*

    Scripts que detectarán en el código fuente cosas como infracciones de ANSI C, problemas de codificación de POD, etc.

  • Maintainers, Maintainers.pl y Maintainers.pm

    En estos archivos se indica quién mantiene cada módulo. Ejecute perl Porting/Maintainers -M Nombre::Módulo para obtener más información sobre un módulo de evolución dual.

  • podtidy

    Ordena un archivo pod. Tras aplicar un parche a un archivo pod, es recomendable ejecutar este programa.

Sistema de compilación

El sistema de compilación de Perl empieza por el script Configure del directorio raíz.

Las partes del sistema de compilación que son específicas de la plataforma se encuentran en directorios específicos de plataforma, como win32/, vms/, etc.

El script Configure se encarga de generar un archivo Makefile.

Perl usa un sistema de compilación denominado metaconfig. El mantenimiento de este sistema se realiza por separado del mantenimiento del núcleo de Perl.

El sistema metaconfig tiene su propio repositorio git. Consulte el archivo README (en http://perl5.git.perl.org/metaconfig.git/) para obtener información detallada.

El directorio Cross contiene varios archivos relacionados con la compilación multiplataforma de Perl. Puede ver más detalles en Cross/README.

AUTHORS

En este archivo figuran todas las personas que han contribuido a Perl. Si envía un parche, debe agregar su nombre a este archivo como parte del parche.

MANIFEST

El archivo MANIFEST del directorio raíz del árbol de código fuente contiene una lista de todos los archivos incluidos en el núcleo de Perl, así como una breve descripción de cada archivo.

Puede ver una descripción general de todos los archivos con el siguiente comando:

  % perl -lne 'print if /^[^\/]+\.[ch]\s+/' MANIFEST

TRADUCTORES

  • Joaquín Ferrero (Tech Lead)

  • Enrique Nell (Language Lead)