Perl

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 25 de mayo de 2021; las comprobaciones requieren 70 ediciones .
Perl
clase de idioma lenguaje de programación
Apareció en 1987 [3]
Autor pared de larry
Desarrollador Larry Wall [1] y la Fundación Perl [d] [2]
extensión de archivo .pl[4] o [4].pm
Liberar 5.36.0 (28 de mayo de 2022 ) ( 2022-05-28 )
sistema de tipos dinámica débil
sido influenciado C++ , C [1] , sed , AWK , BASIC , Lisp y el shell UNIX
influenciado Raku , Ruby , PHP , Groovy , JavaScript
Licencia Licencia Artística [d] [5]y Licencia Pública General GNU, versión 1.0 o posterior [d] [6][7]
Sitio web perl.org
dev.perl.org/perl5/
sistema operativo Linux [8] , macOS [8] , Microsoft Windows [8] , Solaris [8] , AIX [8] y HP-UX [8]
 Archivos multimedia en Wikimedia Commons

Perl  es un lenguaje de programación dinámico interpretado de alto nivel y de propósito general creado por Larry Wall , un lingüista de formación. El nombre del idioma significa oficialmente Lenguaje práctico de extracción e informes ("lenguaje práctico para extraer datos y compilar informes") [9] , y en broma, como Listador de basura patológicamente ecléctico ("listador de basura patológicamente ecléctico") [9] ; los desarrolladores de lenguajes no consideran su nombre como un acrónimo [10] . Inicialmente, el nombre constaba de cinco caracteres y en esta forma coincidía exactamente con la palabra inglesa pearl ("perla"). Pero luego se supo que existía tal lenguaje (ver PEARL ), y se eliminó la letra "a". El símbolo del lenguaje Perl es el camello  , un animal no muy hermoso, pero muy resistente, capaz de hacer un trabajo duro.

La característica principal del lenguaje son sus ricas posibilidades para trabajar con texto, incluido el trabajo con expresiones regulares integradas en la sintaxis. Perl ha heredado muchas propiedades de los lenguajes de programación de shell C , AWK y UNIX .

Perl es famoso por su enorme colección de módulos complementarios de CPAN (alrededor de 200 000 ) que mejoran enormemente sus capacidades. La colección de CPAN se encuentra en https://www.cpan.org .

Resumen

Perl es un lenguaje de programación de propósito general que se creó originalmente para la manipulación de texto, pero ahora se usa para una amplia gama de tareas, incluida la administración de sistemas , el desarrollo web , la programación de redes , los juegos, la bioinformática y el desarrollo de interfaces gráficas de usuario .

El lenguaje se puede caracterizar más como práctico (facilidad de uso, eficiencia, integridad) que bello (elegancia, minimalismo) [11] . Las principales ventajas del lenguaje son el soporte para varios paradigmas ( estilos de programación procedimental , orientado a objetos y funcional ), control de memoria (sin recolector de basura basado en bucles), soporte incorporado para procesamiento de texto, así como una gran colección de terceros . -módulos de fiesta .

Según Larry Wall , Perl tiene dos lemas. El primero es " Hay más de una forma de hacerlo ", también conocido por las siglas TMTOWTDI . El segundo eslogan es “Las cosas fáciles deberían ser fáciles y las cosas difíciles deberían ser posibles ”.

Características

La estructura general de Perl tiene sus orígenes en términos generales en el lenguaje C. Perl es de naturaleza procedimental , con variables , expresiones de asignación , bloques de código separados por llaves , estructuras de control y funciones .

Perl también toma prestadas varias funciones de los lenguajes de programación de shell de UNIX . Todas las variables están marcadas con caracteres iniciales que expresan exactamente el tipo de datos de la variable en ese contexto (p. ej., escalar, matriz, hash). Es importante destacar que estos signos permiten interpolar variables en cadenas. Perl tiene muchas funciones integradas que proporcionan herramientas que se usan a menudo para la programación de shell, como ordenar o llamar a los servicios del sistema.

Perl toma prestadas matrices de Lisp , expresiones regulares de AWK y sed , y hashes ("matrices asociativas") de AWK. Las expresiones regulares facilitan muchas tareas de análisis, procesamiento de texto y manipulación de datos.

Perl 5 agregó soporte para tipos de datos complejos, funciones de primera clase ( cierre como un valor) y un modelo de objetos. Este último incluye referencias , paquetes, ejecución de métodos de una clase, variables con una declaración de alcance léxico y directivas de compilación (por ejemplo, strict). La mayor mejora introducida en Perl 5 fue la capacidad de poner código en "paquetes" ( paquete ) como módulos para su reutilización. Larry Wall comentó más tarde que "Todo el propósito del sistema modular de Perl 5 era fomentar el crecimiento de la cultura de Perl, no las líneas de código" [12] .

Todas las versiones de Perl hacen tipeo automático de datos y administración automática de memoria. El intérprete conoce el tipo y los requisitos de memoria de cada objeto del programa, asigna y libera memoria mediante el conteo de referencias . La traducción de un tipo de datos a otro, por ejemplo, un número a una cadena, ocurre automáticamente en tiempo de ejecución, las traducciones de tipos de datos imposibles conducen a un error fatal.

Trabajar en Windows

Los usuarios de Microsoft Windows suelen utilizar distribuciones con binarios precompilados, como ActivePerl o Strawberry Perl , ya que compilar Perl desde el código fuente en ese sistema operativo  no es una tarea fácil. Cygwin puede facilitar la tarea .

Historia

Primeras versiones

Larry Wall comenzó a desarrollar Perl en 1987 mientras trabajaba como programador para Unisys [13] . La versión 1.0 fue lanzada y anunciada en el grupo de noticias comp.sources.misc el 18 de diciembre de 1987 [14] como "el 'reemplazo' de awk y sed ".

Perl 2 fue lanzado en 1988 . La principal innovación fue un motor de expresiones regulares rediseñado . Perl 3, lanzado en 1989, obtuvo la capacidad de procesar flujos de datos binarios .

Inicialmente, la única documentación para Perl era una sola página de manual (de gran longitud) . En 1991, se lanzó Programación Perl (conocido por muchos programadores como Camel Book debido a la imagen de la portada) y se convirtió en el lenguaje estándar de facto . Al mismo tiempo, la versión del idioma se "actualizó" a 4, no tanto para indicar cambios significativos, sino para indicar que esta versión del idioma estaba documentada en el libro.

Principios de Perl 5

Perl 4 pasó por una serie de lanzamientos, deteniéndose en Perl 4.036 en 1993 . En este punto, Larry Wall abandonó Perl 4 y comenzó a trabajar en Perl 5. El desarrollo de Perl 5 comenzó en 1994. Al mismo tiempo, se creó la lista de correo de perl5-porters para coordinar el trabajo de migrar Perl 5 a varias plataformas. Sigue siendo el foro principal para el desarrollo, mantenimiento y portabilidad de Perl 5 [15] .

Perl 5.000 fue lanzado el 17 de octubre de 1994 . [16] Incluía un intérprete completamente reescrito , así como muchas características nuevas del lenguaje, como objetos , referencias , variables locales ( my $var_name) y módulos . Los módulos fueron una parte particularmente importante, ya que proporcionaron un mecanismo para ampliar el lenguaje sin modificar el intérprete. Esto permitió que el intérprete se estabilizara, pero también permitió que los programadores habituales de Perl agregaran nuevas funciones al lenguaje. Perl 5 está en desarrollo activo hasta el día de hoy.

Perl 5.001 fue lanzado el 13 de marzo de 1995. Perl 5.002 se lanzó el 29 de febrero de 1996 con soporte para nuevos prototipos. Esto permitió a los autores de módulos crear funciones que se comportaban como las funciones integradas de Perl. Perl 5.003 se lanzó el 25 de junio de 1996 y solucionó los problemas de seguridad que se habían descubierto.

Uno de los eventos más importantes en la historia de Perl 5 ocurrió fuera del lenguaje mismo y fue consecuencia del soporte de módulos. El 26 de octubre de 1995 comenzó su labor CPAN ( Comprehensive Perl Archive Network )  , que se convirtió en un repositorio de los módulos de Perl , así como del código fuente del propio lenguaje. Actualmente, CPAN tiene más de 198.600 módulos creados por más de 14.000 programadores [17] [18] .

Perl 5.004 se publicó el 15 de mayo de 1997 y contenía, entre otras cosas, el paquete UNIVERSAL, que proporcionaba al lenguaje un objeto base del que se derivaban automáticamente todas las clases. También se ha incluido la posibilidad de solicitar la versión de los módulos. Además de esto, Perl comenzó a ser compatible con Microsoft Windows, así como con otros sistemas operativos.

Perl 5.005 se lanzó el 22 de junio de 1998 . Esta versión incluyó varias mejoras en el motor de expresiones regulares, nuevos enlaces al backend a través de módulos B::*, un operador de comillas qr//para expresiones regulares, una gran selección de otros módulos nuevos y soporte para varios sistemas operativos, en particular BeOS .

Desde 2000 hasta la actualidad

Versiones 5.6.x

Perl 5.6 se lanzó el 22 de marzo de 2000 . Los cambios importantes incluyeron soporte para sistemas de 64 bits, representación de cadenas Unicode , soporte para archivos grandes (archivos de más de 2 GB ) y la palabra clave our[19] [20] . Durante el desarrollo de Perl 5.6, se tomó la decisión de cambiar el esquema de nomenclatura de la versión a uno más parecido al de otros proyectos de código abierto. La versión 5.005_63 fue seguida por la versión 5.5.640; Según el plan, a las versiones de desarrollo se les asignarían números impares, incluso a las versiones estables.

En 2000, Larry Wall hizo un llamado a la comunidad para discutir activamente las propuestas para la próxima versión de Perl. El resultado de esta discusión fueron 361 RFC ( Solicitud de comentarios  - "solicitud de comentarios"), que se utilizaron en el desarrollo de Perl 6 . En 2001 [21] se comenzó a trabajar en un documento final que resume las propuestas para una nueva generación de Perl. El resultado no se presentó como un documento formal, sino como un resumen de todas las RFC. En ese momento, Perl 6 existía únicamente como una descripción del lenguaje.

Versiones 5.8.x

Perl 5.8 se lanzó por primera vez el 18 de julio de 2002 y desde entonces ha recibido una actualización anual. La última versión de Perl 5.8, 5.8.9, se lanzó el 14 de diciembre de 2008. Perl 5.8 mejoró la compatibilidad con Unicode, agregó una nueva implementación de E/S, agregó compatibilidad con subprocesos múltiples, aumentó la precisión numérica y agregó varios módulos nuevos [22] .

En 2004, se comenzó a trabajar en la Sinopsis, originalmente concebida como una serie de documentos que resumen el documento final mencionado anteriormente. Sin embargo, este conjunto de documentos se convirtió gradualmente en la especificación de Perl 6. En febrero de 2005, Otrius Tan comenzó a trabajar en Pugs , un  intérprete de Perl 6 escrito en Haskell [23] . Este fue el primer intento real de hacer realidad Perl 6. Este intento se extinguió en 2006.

Versiones 5.10.x

El 18 de diciembre de 2007, el vigésimo aniversario de Perl 1.0, se lanzó Perl 5.10.0. Esta versión contenía una serie de innovaciones notables que la acercaban a Perl 6 . Algunas de estas innovaciones son nuevas declaraciones de cambio (llamadas "dado"/"cuándo"), actualizaciones de expresiones regulares y el operador de coincidencia "inteligente" "~~" [24] [25] .

Alrededor de este tiempo, el desarrollo comenzó en serio en una nueva implementación de Perl 6, conocida como Rakudo Perl , desarrollada en conjunto con la máquina virtual Parrot . Desde noviembre de 2009, Rakudo Perl se actualiza regularmente todos los meses y actualmente es la implementación más completa de Perl 6 .

Versiones 5.11.x

Se produjo un cambio significativo en el proceso de desarrollo de Perl 5 después de la introducción de Perl 5.11. La comunidad de desarrolladores ha pasado a un ciclo de lanzamiento mensual, con la fecha de lanzamiento planificada con tres meses de anticipación.

Versiones 5.12.x

El 12 de abril de 2010, Perl 5.12.0 se lanzó al público. Las innovaciones notables incluyen nueva compatibilidad con la sintaxis package NAME VERSION, el operador Yada Yada (utilizado para marcar el código de marcador de posición que aún no se ha implementado), una solución completa al problema Y2038 (Y2038), sobrecarga del operador de expresiones regulares, compatibilidad con DTrace (marco de seguimiento dinámico), así como compatibilidad total con el estándar Unicode 5.2 [26] . El 7 de septiembre de 2010, se lanzó Perl 5.12.2 y el 21 de enero de 2011  , se lanzó Perl 5.12.3. Estos lanzamientos contienen actualizaciones de módulos, así como algunos cambios en la documentación [27] [28] . La versión 5.12.4 se lanzó el 20 de junio de 2011. La última versión de esta rama, 5.12.5, se lanzó el 10 de noviembre de 2012.

Versiones 5.14.x

El 14 de mayo de 2011 , se lanzó Perl 5.14. La compatibilidad con JSON se ha integrado desde la versión 5.14.2. La última versión de esta rama, 5.14.4, se lanzó el 10 de marzo de 2013.

Versiones 5.16.x

El 20 de mayo de 2012 , se lanzó Perl 5.16. Una característica nueva importante es la capacidad de especificar la versión correcta de Perl para emular, lo que permite a los usuarios actualizar Perl pero mantener los scripts antiguos que de otro modo serían incompatibles con la nueva versión que siguen funcionando [29] . El núcleo de Perl 5.16 es compatible con Unicode 6.1 [29] .

Versiones 5.18.x

El 18 de mayo de 2013 , se lanzó Perl 5.18. Las innovaciones significativas incluyen nuevos ganchos dtrace, funciones léxicas, un aumento en el número de funciones incluidas en el kernel, revisiones a la implementación de hashes por razones de seguridad, soporte para Unicode 6.2 [30] .

Versiones 5.20.x - 5.26.x

La versión 5.20 se lanzó el 27 de mayo de 2014 [31] .

El 16 de abril de 2015 se anunció el esperado lanzamiento de la versión 5.22 [32] , el 9 de mayo de 2016 se lanzó la versión 5.24 [33] .

El 30 de mayo de 2017 , se lanzó la siguiente versión estable número 26 [34] .

Versiones 5.28.x

La versión 5.28.0 se lanzó el 22 de junio de 2018 [35] .

Innovaciones clave :

  • Compatibilidad con Unicode 10.0 (símbolo de bitcoin agregado).
  • La función estándar deletese puede utilizar en segmentos hash de clave/valor:
my %sanitised_values ​​​​= eliminar %input_values ​​​​{ @allowed_keys };
  • Comprobación de la uniformidad del sistema de escritura (se ejecuta el guión):
'Perl' =~ /^(*sr:\w+$)/

Devuelve "falso" porque la letra "e" es cirílica (más información sobre la ejecución de scripts [36] )

Características experimentales :

  • Compatibilidad con sinónimos literales para algunas afirmaciones de expresiones regulares:
(? =... ) ( * pla: ... ) o ( * positive_lookahead: ... ) (? !... ) ( * nla: ... ) o ( * positive_lookahead: ... ) (? <=... ) ( * plb: ... ) o ( * positive_lookbehind: ... ) (? <!... ) ( * nlb: ... ) o ( * positive_lookbehind: ... ) (? >... ) ( * atómico: ... )

Mejoras de rendimiento :

  • La sobrecarga asociada con el uso de parámetros Unicode ( \p{...}) en expresiones regulares se ha reducido considerablemente.
  • Concatenación múltiple significativamente acelerada. Por ejemplo, el siguiente código en x86_64 es 4 veces más rápido:
mi $a = "ab\x{100}cde" ; mi $b = "fghij" ; mi $c = "\x{101}klmn" ; mi $s ; para mi $i ( 1 .. 10_000_000 ) { $s = "\x{100}wxyz" ; $s .= "foo=$a bar=$b baz=$c" ; }
  • printf()con un conjunto fijo de argumentos y una cadena de formato que contiene solo %s y %% es más rápido.
  • ref()funciona mucho más rápido en un contexto booleano, porque ya no crea una cadena temporal como Foo=ARRAY(0x134af48).
  • Los bucles for()y construcciones similares serán más rápidos en la mayoría de las situaciones.
  • Ahora es posible almacenar procedimientos en paquetes sin usar tablas de nombres, lo que ahorra grandes cantidades de memoria.

Otros cambios :

  • El núcleo se limpió de "usar vars". Mucha gente sigue usando "use vars", lo cual es una mala práctica desde la introducción de "nuestro" en la versión 5.6.0.
  • Nueva advertencia para los casos:
mi $nombre = 'Pistacho' ; print "En la casa de $nombre" ;
  • Las operaciones bit a bit en cadenas y números ya no son experimentales.
  • La edición en el lugar con ayuda perl -iahora es más segura.
Versión 5.32.0

Fue lanzado el 20 de junio de 2020 [37] y durante 13 meses de desarrollo, se cambiaron alrededor de 140 mil líneas de código en 880 archivos. Perl 5.32 pasa a ser compatible a largo plazo durante 5 años o más. En la "Conferencia de Perl y Raku en la nube" [38] , Sawyer X. anunció un importante cambio de versión de Perl de 5 a 7 [39] . Se espera que Perl 7 sea el mismo Perl 5.32 con los valores predeterminados modernos.

Innovaciones clave:

  • Una nueva instrucción isa experimental que prueba si el objeto especificado es una instancia de la clase pasada o una clase derivada:
if ( $obj isa Paquete:: Nombre ) { ... }
  • ¡Soporte para Unicode 13.0!
  • Ahora es posible escribir operadores de comparación con la misma precedencia que una cadena:
if ( $x < $y <= $z ) { ... } # Igual que: if ( $x < $y && $y <= $z ) { ... }
  • Las declaraciones literales en expresiones regulares ya no son experimentales, por ejemplo: ( *pla:pattern)
  • La capacidad de limitar la plantilla que se está probando a un sistema de escritura específico ("Ejecuciones de guiones") ya no es experimental.
  • Ahora puede deshabilitar las llamadas a métodos indirectos.

Algunas optimizaciones:

  • Verificar la conexión de características adicionales (características) ahora es más rápido.
  • Casos especiales significativamente acelerados para la clasificación (por ejemplo, {$a <=> $b}y {$b <=> $a}).
Versión 5.34.0

Publicado el 20 de mayo de 2021 [40] [41] . Perl 5.34.0 representa aproximadamente 11 meses de desarrollo desde que se lanzó Perl 5.32.0 y contiene aproximadamente 280 000 líneas de cambios en 2100 archivos de 78 autores. Sin contar la documentación, los archivos generados automáticamente y las herramientas para crear la versión en sí, se cambiaron 150 000 líneas en 1300 archivos .pm , .t , .c y .h .

Nueva funcionalidad:

  • Añadido soporte experimental try/catch.
usar la función 'probar' ; prueba { una_funcion (); } catch ( $e ) { advertencia "Ocurrió un error: $e" ; }
  • Ahora se puede omitir el límite inferior del cuantificador de rango: qr/{,n}/.
  • Se permiten espacios para la parte de los metacaracteres entre llaves: \x{ FFFC }o qr/a{ 5, 7 }/.
  • Prefijo agregado 0opara escribir constantes octales: 0o123_456.
  • Se agregaron dos opciones habilitadas de forma predeterminada, limitador bareword_filehandlesy , al módulo de funciones multidimensional:
sin característica qw(bareword_filehandles) ; abierto ( FP , "<" , "./x" ); sin característica qw( multidimensional ) ; mi %h = (); $ h { 1 , 2 };
  • Caso fijo de pérdida de memoria.
  • Conjunto ampliado de mensajes de error y advertencia.
  • Se agregaron cambios a la documentación.
Soluciones relacionadas

Algunos observadores han acreditado el lanzamiento de Perl 5.10 con el lanzamiento del movimiento Modern Perl [42] [43] . En particular, esta frase describe un estilo de desarrollo que involucra el uso de CPAN, aprovechando los últimos desarrollos en el lenguaje y exigiendo código de alta calidad [44] .

A finales de 2012 y en 2013 se lanzaron varios proyectos sobre una implementación alternativa de Perl 5: Perl5 en Perl6 (Rakudo Perl team) [45] , moe (Stephen Little and friends) [46] , p2 [47] (Perl11 equipo de Reini Urban), así como gperl (goccy) [48] .

Perl 6

Desde 2000, se ha desarrollado una nueva (6ª) versión del lenguaje. A diferencia de las versiones anteriores, los desarrolladores planean crear un estándar de lenguaje bien definido. Actualmente existen compiladores experimentales de Perl 6 , pero continúa la discusión sobre nuevas reglas.

Sintaxis de Perl

La sintaxis de Perl comparte muchas similitudes con las de C , AWK , sed y Bourne shell .

La primera línea del código fuente puede comenzar con "#!/Path/to/Perl [-switches]", que le indica al sistema la ruta al intérprete de Perl para ejecutar programas en sistemas UNIX y ejecutarlos en un servidor web (ver también: shebang (Unix) ).

Ejemplo de programa

El programa más simple " ¡Hola, mundo!" " como sigue:

#!/usr/bin/perl print "¡Hola mundo!\n" ;

ya sea para CGI :

#!/usr/bin/perl print "Tipo de contenido: texto/html\n\n" ; imprimir "¡Hola mundo!" ;

ya sea utilizando uno de los marcos web posmodernos

usar Mojolicious::Lite ; get '/' => { texto => '¡Hola mundo!' }; aplicación -> iniciar ;

o utilizando la especificación PSGI

my $app = sub { return [ 200 , [ 'Content-Type' => 'text/plain' ], [ "hola, mundo\n" ]]; }

Agregar a una cadena.

$x = 5 ; $x .= 0 ; imprimir $x ; #cincuenta

Y así es como puedes imprimir el número googol .

imprimir 1 , 0 x 100 ;

Tipos de datos

Tipos de datos básicos: escalar , matriz , tabla hash , función , puntero de archivo , entrada de tabla de símbolos . Las variables de diferentes tipos se distinguen por el signo que precede al nombre de la variable:

Tipo de Símbolo Ejemplo Descripción
Escalar ps $foo valor único; puede ser un número, una cadena , una referencia de archivo o un enlace .
formación @ @foo Una colección ordenada de escalares.
Tabla de picadillo % %foo Colección de pares cadena-escalar; las cadenas se llaman claves y los escalares se llaman valores . El sinónimo es una matriz asociativa .
descriptor de archivo < > $foo o FOO Una representación de un archivo abierto u otro objetivo abierto para lectura y/o escritura.
Función & & foo Una pieza de código que toma argumentos, realiza acciones y devuelve valores.
Entrada de la tabla de símbolos * *fú Entrada de la tabla de símbolos para todos los tipos denominados 'foo'.
Escalar

Las variables escalares se utilizan para almacenar valores únicos. Pueden contener números, cadenas y referencias a otros objetos . Un nombre de variable escalar debe estar precedido por un signo de dólar '$'. El tipo de una variable escalar no es fijo (a diferencia, por ejemplo, del lenguaje C ) y se determina dinámicamente según el contexto. Por ejemplo,

$x = 10 ; # numero $y = $x + 1 ; # usar $x como número... $z = $x . 'cadena' ; # ... y ahora como cadena $ref = \ $x ; # $ref es un puntero a $x $$ref = 10 ; # $x contiene el valor 10

Los datos de cadena deben estar entre comillas. Perl utiliza dos tipos de comillas, comillas simples y comillas dobles. Encerrar una cadena entre comillas dobles le permite reemplazar automáticamente los nombres de las variables que aparecen con sus valores. Encerrar cadenas entre comillas simples evita este comportamiento:

## Un ejemplo de interpolación de variables entre comillas dobles $ pi = 3.141592654 ; $var1 = 'El valor de Pi es $pi\n' ; imprimir $var1 ; # El valor de Pi es $pi\n $var2 = "El valor de Pi es $pi\n" ; imprimir $var2 ; # El valor de Pi es 3.141592654

Para incluir comillas dobles en una cadena que tiene comillas dobles, use \". Para incluir comillas simples en una cadena entre comillas simples, use \'. Para la conveniencia de trabajar con cadenas que contienen muchos caracteres de comillas adentro, Perl le permite use métodos alternativos de citar La forma alternativa usa cualquier par de caracteres colocados después de la letra q (imita el comportamiento de las comillas simples) o qq (imita el comportamiento de las comillas dobles):

## Un ejemplo del uso de comillas alternativas $ pi = 3.141592654 ; $enlace1 = q{<a href="http://en.wikipedia.org/wiki/Pi">$pi</a>} ; imprimir $enlace1 ; # <a href="http://ru.wikipedia.org/wiki/Pi">$pi</a> $enlace2 = qq{<a href="http://ru.wikipedia.org/wiki/Pi ">$pi</a>} ; imprimir $enlace2 ; # <a href="http://ru.wikipedia.org/wiki/Pi">3.141592654</a>

Otro tipo de comillas en Perl son las comillas inversas. Contienen programas del sistema operativo cuya salida se puede canalizar al intérprete de Perl. Por ejemplo:

## Un ejemplo del uso de acentos graves para ejecutar comandos UNIX $espacio = `du -s -k /usr/local/bin` ; imprimir $espacio ; #6264 /usr/local/bin $sysuptime = `tiempo de actividad` ; imprimir $sysuptime ; # 2:24 hasta 1 día, 9:05, 1 usuario, promedios de carga: 0.26 0.32 0.33 Matriz

Una matriz es una lista ordenada de escalares . Cada elemento de la matriz tiene un índice ordinal por el cual se puede acceder. La numeración de elementos comienza desde cero, es decir, el primer elemento de la lista tiene índice 0. Antes del nombre de la variable del arreglo, debe colocar el signo '@', y para acceder a un elemento específico del arreglo, use el '$ ' signo, ya que un solo elemento de la matriz es un escalar. Las matrices multidimensionales se pueden modelar colocando enlaces a otras listas en una lista.

@matriz = ( 1 , 2 , 3 , 4 ); # escribir cuatro elementos en la matriz @array print $array [ 2 ]; # imprime el tercer elemento print @array [ 2 , 3 ]; # imprime el tercer y cuarto elemento. # @ se usa aquí porque el resultado de una operación de corte de matriz también es una matriz. Tabla hash
  • Una tabla hash es una matriz asociativa que le permite asociar una cadena (llamada "clave") con un escalar (valor). La cadena se llama clave y el escalar en la tabla hash se llama valor. El nombre de una variable de lista debe estar precedido por el signo de porcentaje '%', y para acceder a un elemento específico de la matriz, se debe usar el signo '$'.

Una tabla hash se puede inicializar con una matriz o una lista que consta de un número ilimitado de secuencias (clave, valor).

%hash = ( gato => 'gatito' , # aquí => es la llamada "coma larga", en este ejemplo perro => 'cachorro' , # completamente similar en función al ordinario "," excepto vaca => 'becerro' # que los literales de la izquierda están citados implícitamente ); imprimir $ hash { 'gato' }; #Imprimir combinación de impresión de gatito ( " - " , teclas %hash ) ; # Emitir todas las claves. Print gato-perro-vaca print join ( "-" , valores %hash ) ; # Mostrar todos los valores. Imprimir gatito-cachorro-ternero print join ( "-" , %hash ) ; # Imprime gato-gatito-vaca-ternero-perro-cachorro, porque en un contexto de lista el hash se # expande automáticamente en una lista (clave, valor). Dado que las claves en el hash no están ordenadas, se generarán # pares en orden aleatorio cada vez. Función
  • Una función es una pieza de código ejecutable. La función siempre devuelve algún valor. Si la declaración de devolución no especifica explícitamente el valor devuelto, se devuelve el último valor evaluado. Si la función usa retorno sin parámetros, entonces, dependiendo del contexto de la llamada a la función, se devuelve el valor indefinido undef, una lista vacía o nada en absoluto.
sub imprimirDos { imprimir 2 ; } sub tres { 3 ; } $s = \& tres ; imprimir & $s ; #Imprimir 3 $s = \& imprimirDos ; # Escribamos una referencia a la función en el escalar $s - a través de esta referencia se llamará en la siguiente línea. imprimir & $s ; #Imprime 21. `2` en el código de la función y `1` como el valor devuelto por la función imprimirDos imprimir & imprimirDos #Igual Constante
  • Una constante es un valor inmutable. Una constante no es un tipo de lenguaje integrado y se emula mediante funciones. Es preferible definir constantes utilizando el módulo de constantes estándar para que en el futuro no se vea afectado por posibles cambios en la implementación de constantes. Uso:
usa la constante MY => 2 ; imprimir MI ; Entrada de la tabla de símbolos
  • Una entrada de tabla de símbolos (typeglob) es un tipo especial que almacena referencias a todas las variables de otros tipos con ese nombre, así como a los símbolos que un descriptor de archivo suele usar para almacenar, que es un puntero a un archivo, dispositivo o PIPE tubería abierta para escribir, leer o escribir y leer.

Uso:

$s = línea de lectura * STDIN ; #Leer una línea de STDIN (flujo de entrada estándar); contexto escalar. @valores = <ARCHIVO> ; #Leyendo todas las líneas de algún archivo abierto y asociado con el descriptor de ARCHIVO; contexto de la lista. imprimir STDOUT $s ; #Imprimir en STDOUT (flujo de salida estándar)

Un ejemplo más preciso donde se usa typeglob para pasar un descriptor de archivo a una función:

mi $archivo = 'archivo.txt' ; #nombre del archivo a leer open FH , $file ; #abrir archivo mi $texto = _parseFile ( * FH ); #pasar el descriptor de archivo a la función de impresión $texto ; cerrar FH ; # asegúrese de cerrar el descriptor de archivo sub _parseFile { my $fh = shift ; #obtener descriptor de archivo mi $texto = unirse ( '' , <$fh> ); #leer línea por línea desde el descriptor de archivo en una cadena y colocarlo en la variable $texto return $texto ; }

Las versiones recientes de Perl han introducido la capacidad de almacenar descriptores de archivos en escalares, y los programas más nuevos prefieren usar este método.

Las tablas de símbolos también se usan para asociar dos nombres de variables con un solo valor en la memoria, creando sinónimos que se pueden usar para acceder y modificar el valor al igual que el nombre original. Esta capacidad es la base del sistema de módulos, clases y objetos cargables de Perl .

Clases y objetos

Un objeto en Perl es simplemente una referencia asociada con una clase particular (paquete). Para la comunicación, se utiliza la función bendecir. Las rutinas de dicho paquete vinculado son métodos y reciben una referencia como primer argumento.

No existe una sintaxis especial para los constructores, se usa una rutina de paquete que devuelve una referencia asociada con ese paquete.

También hay muchas extensiones del sistema OOP que le permiten cambiar la sintaxis y usar azúcar sintáctico, entre las que vale la pena mencionar el módulo Moose cpan y su versión ligera Moo [49] . Moose es utilizado por muchos proyectos y grandes empresas como la BBC o Cisco [50] .

Expresiones regulares

Las expresiones regulares son una parte importante de Perl . Esto hace que Perl sea muy adecuado para el procesamiento de textos. La mayor parte del trabajo con expresiones regulares se realiza con los operadores =~, m//y s///.

El operador m//se utiliza para probar una coincidencia. En el caso más simple, el resultado de la expresión $x =~ m/abc/será verdadero si y solo si la cadena $xcoincide con la expresión regular abc. Por ejemplo:

Ejemplo Sentido
$x =~ /abc/ La cadena $xcontiene la (sub)cadena "abc". La "m" inicial del operador //puede omitirse cuando se usa.
$x =~ m/a(.{1,3})c/ La cadena $xcontiene la letra "a", luego uno o tres caracteres que no sean el carácter de nueva línea "\n", y luego la letra "c".
$x =~ m{^p(erl|ugs)$}i La cadena $xes estrictamente igual a "perl" o "pugs" y no distingue entre mayúsculas y minúsculas. Además, en lugar //de expresiones regulares rodeadas de {}.

La búsqueda y el reemplazo se realizan mediante el operador s///. La construcción $x =~ s/abc/def/;reemplazará la primera aparición de la expresión regular abccon la cadena def.

Ejemplo Sentido
$x =~ s/abc/def/g; Todas las ocurrencias (como lo indica el indicador -global /g ) de la subcadena "abc" en $xserán reemplazadas por "def".
$x =~ s/a(.{1,3})c/!$1!/; La primera aparición de las $xletras "a", luego de uno a tres caracteres que no sean el carácter de nueva línea "\n", y luego la letra "c" será reemplazada por los caracteres entre "a" y "c", rodeados por "!". Por ejemplo, "sintáctico" se convertiría en "synt!cti!".
$x =~ s{^p(erl|ugs)}{"P" . lc $1}ieg; Aquí hay un ejemplo del uso del modificador /e, que indica que en lugar de la cadena de reemplazo, se escribirá el código, cuyo resultado se debe usar. Todas las apariciones de "perl" o "pugs" en cualquier caso se cambiarán a "Perl" y "Pugs", respectivamente.

Con la llegada de las expresiones regulares dinámicas (??{ код Perl })y la construcción para incluir código Perl ejecutable en una expresión regular, las (?{ код Perl })posibilidades de búsqueda y reemplazo son casi ilimitadas. Por ejemplo, se hizo posible buscar estructuras de nivel de anidamiento arbitrario.

Las expresiones regulares de Perl son tan populares que se incluyen directamente en otros lenguajes como PHP y JavaScript , y también existen bibliotecas de complementos que implementan el uso de expresiones en lenguajes compilados.

Programas de una línea

Una característica interesante y de uso frecuente de Perl son los llamados one-liners: programas de una línea, generalmente especificados directamente en la línea de invocación del intérprete usando la extensión -e.

Este programa imprimirá números primos :

perl - wle '(1 x $_) !~ /^(1|((11+)\3+))$/ && imprimir while ++ $_'

Este ejemplo imprimirá solo las líneas únicas del archivo de archivo, la clave -nenvuelve automáticamente la línea de procesamiento en un bucle que itera a través de todas las líneas en los archivos especificados después del texto del programa:

perl - ne '$s{$_}++ || archivo de impresión

Nota: Para ejecutar el comando anterior en Windows, reemplace los apóstrofes 'con comillas dobles ".

En estos ejemplos, Perl se parece a J en su brevedad e incomprensibilidad a primera vista .

También uno de esos ejemplos es el programa [51] , que causó mucha controversia, es en realidad un parche de Barmin (un comando disfrazado para eliminar recursivamente todos los archivos):

echo "prueba... prueba... prueba..." | perl -e ' $ ??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;ver'

echo "test... test... test..." la ejecución de este comando no afecta el trabajo y se agrega, muy probablemente, para calmar la vigilancia. Lo que sucede en el resto del código no es del todo obvio debido a la escritura deliberadamente confusa. Esta línea contiene solo tres comandos ejecutados secuencialmente. Escribamos el comando de la siguiente manera:

ps ? s: ; s:s ;; ps : : s ;; = ] => % - { <-| } <&| `{; ; y; -/:-@[-` { - }; ` - { / " - ; ; s ;; $_ ; ver

La primera construcción analiza el $? es el código de retorno del comando anterior. Dado que no se crearon procesos secundarios antes de esta construcción, $? contendrá 0, y la segunda rama se ejecutará s;;=]=>%-{<-|}<&|`{;. Este comando, a su vez, reemplaza la cadena en la variable del acumulador $_ con =]=>%-{<-|}<&|`{ (el primer carácter después de la s establece el delimitador de parámetros para este operador, y aunque el barra inclinada '/' o '|', en aras de la claridad, esta construcción utiliza el delimitador ';').

El segundo comando transmite el contenido del "acumulador" de acuerdo con reglas bastante complicadas. Cuatro rangos de caracteres se indican en el lado izquierdo, un rango se indica a la derecha. Si ampliamos estos rangos, obtenemos la siguiente correspondencia:

! "#$%&'()*+,-./:;<=>?@[\]^_`{|} `abcdefghijklmnopqrstuvwxyz{/" -

Como resultado, el contenido de $_ se convierte en

sistema "rm-rf/"

El tercer comando, sin embargo, dos veces (según las instrucciones de la bandera ee) "calcula" el contenido del acumulador, el comando destructivo anterior  , e intenta reemplazar la cadena vacía en el acumulador con el resultado del cálculo.

Lenguajes de programación y shells con tecnologías similares

Perl está lejos de ser el único lenguaje que proporciona capacidades de procesamiento de texto enriquecido. Los lenguajes de programación REFAL , Icon y Snobol brindan la oportunidad de utilizar de manera más completa el método de programación de "coincidencia de patrones", del cual las expresiones regulares son un caso especial.

También hay un shell de comandos UNIX completo basado en el lenguaje Perl. Se llama psh y te permite mezclar los comandos del shell regular y el propio Perl [52] .

Poesía en Perl

Incluso puedes escribir poemas en Perl. Uno de estos poemas, llamado "Black Perl" ("Black Pearl" o "Black Pearl"), fue mencionado por Larry Wall en una carta de April Fool a Usenet . Originalmente se escribió para Perl 3 y, según las propias palabras de Larry, sintió una satisfacción moral cuando el poema falló en el analizador en Perl 5.

DELANTE: cierre la puerta , cada ventana y salga ; espera hasta el momento . abrir libro de hechizos , estudiar , leer ( escanear , seleccionar , contarnos ) ; escríbalo , imprima el hexadecimal completo para cada reloj , invierta su longitud , escriba de nuevo ; matar arañas , reventarlas , picarlas , dividirlas , matarlas . _ _ desenlazar los brazos , cambiar , esperar y escuchar ( escuchar , esperar ), ordenar el rebaño ( luego , advertir a las "cabras" y matar a las "ovejas" ); mátenlos , desháganse de escrúpulos , desviaciones morales , valores a un lado , cada uno ; muera oveja ! muere para revertir el sistema que aceptas ( rechazar , respetar ); siguiente paso , matar , siguiente sacrificio , cada sacrificio , esperar , rehacer el ritual hasta que "todos los espíritus estén complacidos" ; hazlo ( " como dicen" ) . hazlo ( * todos *** deben *** participar *** en *** prohibido ** s * e * x * ) . _ devolver la última víctima ; cuerpo del paquete ; salga de la cripta ( tiempo , tiempos y "medio tiempo" ) y ciérrela , seleccione ( rápidamente ) y advierta a su próxima víctima ; EPÍLOGOS: no se lo digas a nadie , espera , espera hasta el momento ; espera hasta el próximo año , la próxima década ; duerme , duerme , muere tú mismo , muere al fin

Editores

Especialmente para los desarrolladores de Perl en Perl que utilizan la biblioteca de interfaz wxWidgets , se escribe un producto tan abierto como Padre IDE (abreviatura de "Perl Application Development and Refactoring Environment" ) [53] .

El soporte de Perl está incluido en el versátil IDE ActiveState Komodo y su versión de código abierto Komodo Edit [54] . Para Eclipse , el soporte de Perl se implementa como el paquete de extensión EPIC [53] [55] . Ambos entornos incluyen, entre otras cosas, un depurador visual [56] . IntelliJ IDEA y otros productos de JetBrains son compatibles con Perl5 a través de un complemento de código abierto llamado Camelcade .

La compatibilidad con Pearl de una forma u otra está disponible en la mayoría de los editores de texto para programadores, como Vim [53] , Emacs [53] , SciTE [ 53] , Gedit [57] , Geany , jEdit [57] , Sublime Text , o dedicado para Windows Notepad++ [53] [57] y PSPad , así como productos shareware como UltraEdit y UEStudio de IDM Computer Solutions, Inc. Para Mac OS , TextMate [53] puede servir como dicho editor .

Perl Editor, que forma parte de una línea de editores shareware especializados para programadores de DzSoft [58] [59] [60] , también es bastante popular entre los usuarios de Windows . El editor gratuito Mastak Absolute Perl [61] era bastante conocido , pero su desarrollo y soporte han sido descontinuados, la última versión está fechada el 29 de septiembre de 2003 [62] . Otro editor perl doméstico gratuito para Windows es Perl Express [63] (la última versión con interfaz en ruso es la 2.4.5 con fecha del 2 de diciembre de 2005, con interfaz en inglés - 2.5 con fecha del 23 de diciembre de 2005) [64] . Otros entornos de desarrollo especializados para Perl incluyen el shareware IDE PerlBuilder [65] [66] [67] y el editor local Collie Perl Shell 2.0 [66] [68] .

Véase también

Notas

  1. 1 2 3 http://learn.perl.org/faq/perlfaq1.html
  2. 1 2 http://www.perlfoundation.org/
  3. https://metacpan.org/pod/perlhist
  4. 1 2 http://justsolve.archiveteam.org/wiki/Perl
  5. The perl Open Source Project en Open Hub: Página de licencias - 2006.
  6. http://dev.perl.org/licenses/
  7. https://history.perl.org/PerlTimeline.html
  8. 1 2 3 4 5 6 https://www.perl.org/get.html
  9. 1 2 Documentación  de Perl . Fecha de acceso: 18 de diciembre de 2016. Archivado desde el original el 20 de enero de 2011.
  10. ¿Cuál es la diferencia entre "perl" y "Perl"?  (Inglés) . Fecha de acceso: 18 de diciembre de 2016. Archivado desde el original el 12 de julio de 2012.
  11. página del manual de perlintro(1)
  12. Publicación de Usenet, 10 de mayo de 1997, con ID [email protected]
  13. Larry Wall (enlace descendente) . Consultado el 20 de agosto de 2006. Archivado desde el original el 12 de marzo de 2006. 
  14. Perl, un "reemplazo" de awkysed . Recuperado: 18 de diciembre de 2007.
  15. archivo de lista de correo de perl5-porters . Consultado el 24 de agosto de 2010. Archivado desde el original el 1 de mayo de 2011.
  16. [ Historia del lenguaje Perl en perldoc.perl.org   ] . Consultado el 24 de agosto de 2010. Archivado desde el original el 13 de enero de 2011. Historia de Perl en perldoc.perl.org   ]
  17. CPAN: red integral de archivos de Perl . Consultado el 13 de julio de 2021. Archivado desde el original el 3 de octubre de 2019.
  18. página CPAN de perl.org . Consultado el 1 de noviembre de 2010. Archivado desde el original el 27 de mayo de 2012.
  19. perl56delta-perldoc.perl.org . Consultado el 1 de noviembre de 2010. Archivado desde el original el 2 de febrero de 2011.
  20. perl561delta-perldoc.perl.org . Consultado el 1 de noviembre de 2010. Archivado desde el original el 18 de noviembre de 2010.
  21. [https://web.archive.org/web/20101123182201/http://dev.perl.org/perl6/doc/design/apo/A01.html Archivado el 23 de noviembre de 2010 en Wayback Machine . Archivado el 23 de noviembre de 2010 en el Apocalipsis 1 de Wayback Machine : lo feo, lo malo y lo bueno - dev.perl.org  ]
  22. perl58delta-perldoc.perl.org . Consultado el 1 de noviembre de 2010. Archivado desde el original el 21 de noviembre de 2010.
  23. HaskellWiki . Consultado el 1 de noviembre de 2010. Archivado desde el original el 11 de octubre de 2006.
  24. perldelta: novedades de perl 5.10.0 Archivado el 30 de marzo de 2009.
  25. ↑ Coincidencia inteligente en detalle Archivado el 18 de febrero de 2010.
  26. perl5120delta-search.cpan.org . Consultado el 1 de noviembre de 2010. Archivado desde el original el 29 de noviembre de 2010.
  27. perl5122delta-search.cpan.org . Consultado el 1 de noviembre de 2010. Archivado desde el original el 30 de noviembre de 2010.
  28. perldelta: novedades de perl  v5.12.3 . Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Fecha de acceso: 18 de diciembre de 2013. Archivado desde el original el 8 de junio de 2011.
  29. 1 2 perldelta: novedades de perl v5.16.0  (ing.)  (enlace descendente) . Documentación de Perl 5 versión 16.0 . metacpan.org. Consultado el 21 de mayo de 2012. Archivado desde el original el 28 de julio de 2020.
  30. perl5180delta - novedades de perl v5.18.0 - metacpan.org - Lenguaje de programación Perl . Documentación de Perl 5 versión 18.0 . metacpan.org. Fecha de acceso: 27 de octubre de 2013. Archivado desde el original el 29 de octubre de 2013.
  31. ↑ Lanzamiento de Perl 5.20  (inglés)  (enlace descendente) (27 de mayo de 2014). Fecha de acceso: 18 de diciembre de 2016. Archivado desde el original el 27 de octubre de 2016.
  32. Vista previa de Perl 5.22  (inglés)  (enlace descendente) (16 de abril de 2015). Consultado el 18 de diciembre de 2016. Archivado desde el original el 15 de noviembre de 2016.
  33. . Lanzamiento de Perl 5.24  (  enlace no disponible) (9 de mayo de 2016). Fecha de acceso: 18 de diciembre de 2016. Archivado desde el original el 24 de noviembre de 2016.
  34. ↑ Lanzamiento de Perl 5.26  ( 30 de mayo de 2017). Consultado el 6 de junio de 2017. Archivado desde el original el 3 de junio de 2017.
  35. ↑ Lanzamiento de Perl 5.28.0 (14 de julio de 2021). Consultado el 14 de julio de 2021. Archivado desde el original el 14 de julio de 2021.
  36. Script Runs (16 de julio de 2021). Consultado el 14 de julio de 2021. Archivado desde el original el 14 de julio de 2021.
  37. ↑ Lanzamiento de Perl 5.32.0  ( 13 de julio de 2021). Consultado el 13 de julio de 2021. Archivado desde el original el 13 de julio de 2021.
  38. The Perl Conference in the Cloud  ( 13 de julio de 2021). Consultado el 13 de julio de 2021. Archivado desde el original el 10 de mayo de 2021.
  39. Anuncio de Perl 7  ( 13 de julio de 2021). Consultado el 13 de julio de 2021. Archivado desde el original el 24 de junio de 2020.
  40. Anuncio del lanzamiento de Perl 5.34.0  ( 13 de julio de 2021). Consultado el 13 de julio de 2021. Archivado desde el original el 4 de junio de 2021.
  41. ↑ Lanzamiento de Perl 5.34.0  ( 13 de julio de 2021). Consultado el 13 de julio de 2021. Archivado desde el original el 21 de junio de 2021.
  42. Milestones in the Perl Renaissance - Modern Perl Programming Archivado el 27 de octubre de 2012 en Wayback Machine . modernperlbooks.com. Recuperado el 17-07-2013.
  43. Viacheslav Tikhanovsky. El renacimiento de Perl  // Pragmatic Perl. - Marzo 2013. - Edición. 1 .
  44. Prefacio (Modern Perl 2011-2012) Archivado el 28 de septiembre de 2012 en Wayback Machine . modernperlbooks.com. Recuperado el 17-07-2013.
  45. YAPC::NA 2013 - 3-5 de junio, Austin, Texas (enlace no disponible) . Fecha de acceso: 18 de diciembre de 2013. Archivado desde el original el 22 de junio de 2013. 
  46. [https://web.archive.org/web/20131219185710/http://blogs.perl.org/users/stevan_little/2013/02/what-is-moe-a-clarification.html Archivado el 19 de diciembre de 2013 en la Wayback Machine Qué es Moe (una aclaración) | Stevan Little [blogs.perl.org]]
  47. p2 en poción . Fecha de acceso: 18 de diciembre de 2013. Archivado desde el original el 24 de septiembre de 2013.
  48. goccy/gperl GitHub . Consultado el 18 de diciembre de 2013. Archivado desde el original el 23 de febrero de 2015.
  49. Tom Christiansen, Larry Wall, Brian Foy y Jon Orwant. cap. 12.Objetos. -> The Moose in the Room // Programación Perl: potencia inigualable para el procesamiento de texto y secuencias de comandos. - O'Reilly , 2012. - Pág. 453-455. — 1130 pág. - ISBN 0596004923 , 9780596004927.
  50. moose: un sistema de objetos posmoderno para Perl . Consultado el 15 de noviembre de 2011. Archivado desde el original el 23 de noviembre de 2011.
  51. programa Perl de una línea . Consultado el 22 de abril de 2012. Archivado desde el original el 9 de mayo de 2012.
  52. perlfaq3-perldoc.perl.org . Consultado el 19 de mayo de 2010. Archivado desde el original el 25 de mayo de 2010.
  53. 1 2 3 4 5 6 7 Sébastien Aperghis-Tramoni, Damien Krotkine, Philippe Bruhat, Jérôme Quelin. Ch.1 Démarrer con Perl ⟶ Édites les programmers // Perl moderne. — Pearson Education Francia, 29 de octubre. 2010. - Págs. 4-5. — 446 pág. — (La guía de supervivencia). — ISBN 9782744024191 .
  54. Andy Lester, Richard Foley. cap. 14. Depuradores de línea de comandos y depuradores de GUI ⟶ ActivePerl Pro Studio // Pro Perl Debugging. - Apress, 27 de julio de 2005 - Pág. 233. - 296 Pág. — ISBN 9781430200444 .
  55. Editor EPIC-Perl e IDE para Eclipse . Consultado el 16 de mayo de 2022. Archivado desde el original el 8 de mayo de 2022.
  56. brian d foy. Capítulo 4. Depuración de Perl ⟶ Otros depuradores // Dominar Perl . - O'Reilly, 16 de julio de 2007 - P.  64 . — 346 pág. — ISBN 9780596551476 .
  57. 1 2 3 Keith Bradnam, Ian Korf. 2.3 Instalación de un editor de código // ¡UNIX y Perl al rescate!: Una guía de campo para las ciencias de la vida (y otras actividades ricas en datos) . - Cambridge University Press, 19 de julio de 2012 - P.  15 . — 428 págs. — ISBN 9781107000681 .
  58. R. Chris Fraley. cap. 15. En resumen // Cómo realizar una investigación del comportamiento en Internet: una guía para principiantes sobre HTML y CGI/Perl . - Guilford Press, 2004. - Pág  . 272 ​​​​. — 299p. - ISBN 978-1-57230-997-5 .
  59. John P. Flynt. Capítulo 1. Primeros pasos // Perl Power!: La guía completa . - Curso Thomson Tecnología PTR, 2006. - S.  22-24 . — 427 pág. — ISBN 9781598631616 .
  60. Editor DzSoft Perl . Fecha de acceso: 8 de enero de 2014. Archivado desde el original el 8 de enero de 2014.
  61. "Mastak.Ru" presentó un completo conjunto de herramientas para desarrolladores de Perl , CNews  (24 de abril de 2002). Archivado desde el original el 9 de enero de 2014. Consultado el 9 de enero de 2014.
  62. Mastak Absolute Perl Archivado el 9 de enero de 2014 en Wayback Machine en SoftPortal
  63. Perl en Open Directory Project Links Directory ( dmoz ).
  64. Perl Express Archivado el 23 de octubre de 2013 en Wayback Machine  : un editor gratuito de Perl para Windows
  65. Andy Lester, Richard Foley. cap. 14. Depuradores de línea de comandos y depuradores de GUI ⟶ Perl Builder // Pro Perl Debugging. - Apress, 27 de julio de 2005 - pp. 234-235. — 296p. — ISBN 9781430200444 .
  66. 1 2 p4in. Software para perl-developer  // Número especial de Xakep. - Nº 15 .
  67. Perl Builder 2.0 Archivado el 13 de febrero de 2014.
  68. Collie Perl Shell 2.0 Archivado el 9 de enero de 2014.

Literatura

  • Larry Wall, Tom Christiansen, John Orvant. Programación Perl = Programación Perl. - M .: O'Reilly , "Símbolo" , 2008. - 1145 p. - 4500 copias.  — ISBN 5-93286-020-0 .
  • Randal L. Schwartz, Tom Phoenix, Brian D. Foy. Aprendiendo Perl . - M .: O'Reilly , "Símbolo" , 2009. - S. 377. - ISBN 978-5-93286-154-7 .
  • Randal L. Schwartz, Brian D. Foy y Tom Phoenix. Perl: profundizando. - M .: O'Reilly , "Símbolo" , 2007. - S. 320. - ISBN 978-5-93286-093-9 .
  • Christiansen, Torkington. perla Colección de recetas. Para profesionales = Libro de cocina de Perl. - M .: O'Reilly , "Peter" , 2004. - 928 p. — ISBN 5-94723-855-1 .
  • Pablo Whitehead. Perl: Curso de programación visual = Perl: Su modelo visual para crear secuencias de comandos de Perl. - M. : "Dialéctica" , 2001. - 280 p. — ISBN 0-7645-3478-5 .
  • Lincoln D. Stein. Desarrollo de programas de red en Perl = Programación de Redes con Perl. - M .: Addison Wesley , "Williams" , 2001. - 752 p. - 4000 copias.  — ISBN 5-8459-0222-3 .
  • Learning Perl 6.ª edición (2011), O'Reilly. Introducción de nivel principiante a Perl.
  • Principios de Perl 1.ª edición (2012), Wrox. Un tutorial para principiantes para aquellos nuevos en la programación o simplemente nuevos en Perl.
  • Modern Perl Archivado el 22 de diciembre de 2011 en Wayback Machine 2nd Edition (2012), Onyx Neon. Describe las técnicas de programación de Modern Perl .
  • Programación Perl 4.ª edición (2012), O'Reilly. La referencia definitiva de Perl.
  • Programación eficaz en Perl , 2.ª edición (2010), Addison-Wesley. Guía de nivel intermedio a avanzado para escribir Perl idiomático.
  • Libro de cocina de Perl , ISBN 0-596-00313-7 . Ejemplos prácticos de programación en Perl.
  • Dominus, Mark Jason. Perl de orden superior  (indefinido) . -Morgan Kaufmann , 2005. -ISBN 1-55860-701-3 . Técnicas de programación funcional en Perl.

Enlaces