Perl ye unllinguaxe de programación diseñáu porLarry Wall en1987. Perl toma carauterístiques del llinguaxeC, del llinguaxe interpretáu bourne shell (sh),AWK,sei,Lisp y, nun grau inferior, de munchos otros llinguaxes de programación.
Estructuralmente, Perl ta basáu nun estilu de bloques como los del C o AWK, y foi llargamente adoptáu pola so maña nel procesáu de testu y nun tener nenguna de les llimitaciones de los otros llinguaxes descript.
Larry Wall empezó a trabayar en Perl en1987 mientres trabayaba como programador enUnisys[2] y anunció la versión 1.0 nelgrupu de noticies comp.sources.misc el18 d'avientu de 1987. El llinguaxe espandióse rápido nos siguientes años. Perl 2, publicáu en1988, apurrió un meyor motor d'espresiones regulares. Perl 3, publicáu en1989, añadió soporte pa datos binarios.
Hasta1991 la única documentación de Perl yera una simple (y cada vez más llarga) páxina de manual Unix. En 1991 publicóse[[ProgrammingPerl]] (el llibru delcamellu) y convirtióse na referenciade facto del llinguaxe. Coles mesmes, el númberu de versión de Perl saltó a 4, non por marcar un gran cambéu nel llinguaxe, sinón por identificar a la versión que taba documentada nel llibru.
Perl 4 traxo consigo una serie de llanzamientos de caltenimientu, rematando en Perl 4.036 en 1993. Nesti puntu, Larry Wall abandonó Perl 4 pa empezar a trabayar en Perl 5. Perl 4 quedar nesa versión hasta güei.
El desenvolvimientu de Perl 5 siguió en1994. La llista de corréuperl5-porters establecer en mayu de 1994 pa coordinar el trabayu d'adautación de Perl 5 a distintes plataformes. Ye'l primer foru pa desenvolvimientu, caltenimientu y adautación de Perl 5.
Perl 5 foi publicáu'l17 d'ochobre de 1994. Foi casi una completa reescritura delintérprete y añadió munches nueves carauterístiques al llinguaxe, incluyendo oxetos, referencies, paquetes y módulos. A destacar, los módulos aproven d'un mecanismu pa estender el llinguaxe ensin modificar l'intérprete. Esto dexó estabilizar el so nucleu principal, amás de dexar a los programadores de Perl añader nueves carauterístiques.
El26 d'ochobre de1995, creóse'lComprehensive Perl Archive Network (CPAN).CPAN ye una coleición de sitio web qu'almacenen y distribúin fontes en Perl, binarios, documentación, scripts y módulos. Orixinalmente, cada sitiu CPAN tenía de ser aportáu al traviés de la so propiu URL; anguaño,http://www.cpan.org redirecciona automáticamente a unu de los cientos de repositorios espeyu de CPAN.
En2008, Perl 5 sigue siendo calteníu. Carauterístiques importantes y delles construcciones esenciales fueron añadíes, incluyendo soporteUnicode,filos, un soporte importante pa la programación empobinada a oxetos y otres meyores.
Perl llamóse orixinalmente "Pearl". Larry Wall quería da-y al llinguaxe un nome curtiu con connotaciones positives; asegura que miró (y refugó) toles combinaciones de trés y cuatro lletres del diccionariu. Tamién consideró nomalo como la so esposa Gloria. Wall afayó antes del llanzamientu oficial que yá esistía un llinguaxe de programación llamáuPEARL y camudó la ortografía del nome.
El nome de normal empieza con mayúscula (Perl) cuando se refier al llinguaxe y con minúscula (perl) cuando se refier al propiu programa intérprete por cuenta de que los sistemes de ficheros Unix estremen mayúscules y minúscules. Antes del llanzamientu de la primer edición deProgramming Perl yera común referise al llinguaxe comoperl;Randal L. Schwartz, sicasí, forzó'l nome en mayúscula nel llibru por que destacara meyor cuando fuera impresu. La distinción foi subsiguientemente adoptada pola comunidá.
El nome ye descritu dacuando como "PERL" (porPracticalYxtraction andReportLanguage -Llinguaxe Práuticu pa la Estracción ya Informe). Anque esta espansión prevaleció en munchos manuales actuales, incluyendo la páxina de manual de Perl, ye unretroacrónimo y oficialmente'l nome nun quier dicir nada. La ortografía de PERL en mayúscules ye por eso usada comoxíriga pa detectar a individuos ayenos a la comunidá. Sicasí, suxiriéronse dellos retroacrónimos, incluyendo'l cómicuPathologically Eclectic Rubbish Lister (Contabilizador de Basura Patológicamente Eclécticu).
Perl simbolízase xeneralmente por un camellu d'una sola gorrumba (camellu arábigu odromedariu), que foi la imaxe escoyida pol editorO'Reilly pa la cubierta deProgramming Perl, que por consiguiente adquirió'l nome deEl Llibru del Camellu.[2] O'Reilly ye propietariu d'esti símbolu como marca rexistrada, pero diz qu'usa los sos derechos llegales namái pa protexer la"integridá ya impautu d'esti símbolu".[3]O'Reilly dexa l'usu non comercial del símbolu, y ufierta logosProgramming Republic of Perl y botonesPowered by Perl.
Dende va unos años, y p'evitar esti tipu de problemes cola llicencia comercial, la Fundación Perl ellaboró nuevos logotipos basaos nuna cebolla, arriendes de les conferencies añales que Larry Wall ufierta col títulu:State of the Onion ("Estáu de la Cebolla")Onion pronúnciase bien paecíu aUnion, polo que suena paecíu aState of the Union ("Discursu del Estáu de la Unión Estáu de la Unión"), eventu nel cual el Presidente de los Estaos Xuníos informa a los ciudadanos del estáu en que s'atopa'l so país.
Previóse que fuera práuticu (facilidá d'usu, eficiente, completu) en llugar de formosu (pequeñu, elegante, mínimu). Los sos principales carauterístiques son que ye bono d'usar, soporta tantu laprogramación estructurada como laprogramación empobinada a oxetos y laprogramación funcional (vease Higher-Order Perl: Transforming Programs with Programs), tien incorporáu un poderosu sistema de procesamientu de testu y una enorme coleición de módulos disponibles.
Perl tamién toma carauterístiques de la programaciónshell. Toles variables son marcaes con unSigilo precedente (Sigil, n'inglés). Los sigilos identifiquen inequívocamente los nomes de les variables, dexando a Perl tener una rica sintaxis. Notablemente, los sigilos dexen interpolar variables direutamente dientro de lescadenes de calteres (string). Como nos shell, Perl tien munches funciones integraes pa xeres comunes y p'aportar a los recursos del sistema.
En Perl 5, añadiéronse carauterístiques pa soportarestructures de datos complexes,funciones de primer orde (p. y.clausures como valores) y un modelu deprogramación empobinada a oxetos. Estos inclúin referencies, paquetes y una execución demétodos basada en clases y l'introducción de variables d'ámbitu léxicu, que fizo más fácil escribir códigu robezu (xunto col pragmastrict). Una carauterística principal introducida en Perl 5 foi l'habilidá de empaquetar códigu reutilizable comomódulos. Larry Wall indicó más palantre que "la intención del sistema de módulos de Perl 5 yera sofitar la crecedera de la cultura Perl en vegada del nucleu de Perl".[4]
Toles versiones de Perl faen eltipificado automáticu de datos y laxestión de memoria. L'intérprete conoz el tipu y requerimientos d'almacenamientu de cada oxetu nel programa; reserva y llibera espaciu pa ellos según sía necesariu. Les conversiones llegales de tipu facer de forma automática en tiempu d'execución; les conversiones illegales son consideraes errores fatales.
El diseñu de Perl puede ser entendíu como una respuesta a trés amplies enclinos de la industria informático: rebaxa de los costos nel hardware, aumentu de los costos llaborales y les meyores na teunoloxía de compiladores. Enantes, munchos llinguaxes d'ordenador comoFortran y C, fueron diseñaos pa faer un usu eficiente d'un hardware caru. En contraste, Perl ye diseñáu pa faer un usu eficiente de los costosos programadores d'ordenador.
Perl tien munches carauterístiques que faciliten la xera del programador a cuenta de unos requerimientos de CPU y memoria mayores. Estes inclúin xestión de memoria automática;tipu de datu dinámicu;strings, llistes yhashes; espresiones regulares; introspeición y una funcióneval().
Larry Wall foi adomáu como llingüista y el diseñu de Perl foi bien aprendíu con principios llingüísticos. Exemplos inclúin laCodificación Huffman (les construcciones más comunes tienen de ser les más curties), bona distribución (la información importante tien de dir primeru) y una llarga coleición de primitives del llinguaxe. Perl favorez les construcciones del llinguaxe, tan naturales, como pa los humanos son la llectura y l'escritura, inclusive si eso fai más complicáu al intérprete Perl.
La sintaxis de Perl reflexa la idea de que "coses que son distintes tienen de paecer distintes". Por casu, esguilares,arrays yhashes tienen distintu sigilo. Índices dearray y claveshash usen distintes clases de paréntesis.Strings y espresiones regulares tienen distintes allindiadores estándar. Esti aproximamientu puede oldease con llinguaxes comoLisp, onde la mesma construcciónS-espresión y sintaxis básica usar pa munchos y variaos propósitos.
Perl tien carauterístiques que soporten una variedá de paradigmes de programación, como laimperativa,funcional y laProgramación empobinada a oxetos empobinada a oxetos. Coles mesmes, Perl nun obliga a siguir nengún paradigma en particular, nin obliga al programador a escoyer dalguna d'elles.
Hai un ampliu sentíu de lo práctico, tantu nel llinguaxe Perl como na comunidá y la cultura que la arrodien. El prefaciu deProgramming Perl empieza con, "Perl ye un llinguaxe pa tener el to trabayu termináu". Una consecuencia d'esto ye que Perl nun ye un llinguaxe ordenáu. Inclúi carauterístiques si la xente usar, tolera esceiciones a les regles y emplega laheurística pa resolver ambigüedaes sintáctiques. Por cuenta de la naturaleza indulxente del compilador, dacuando los errores pueden ser difíciles d'atopar. Falando del variáu comportamientu de les funciones internes nos contestos de llista y esguilar, la páxina de manual deperlfunc(1) diz "Polo xeneral, faen lo que'l to quieras, siempres que quieras la coherencia."
Perl tien dellos lemas que tresmiten aspeutos del so diseñu y usu. Unu yeThere's more than one way to do it (Hai más d'una forma de faelo) (TMTOWTDI, usualmente pronunciáu 'Tim Toady'). Otros son"Perl: la motosierra del exércitu Suizu de los llinguaxes de programación" y"Llendes imprecises". Una meta prefijada de Perl ye faer les coses fáciles de forma fácil y les xeres difíciles, posibles. A Perl tamién se-y llamó"L'esparadrapu d'Internet".
Perl tien munches y variaes aplicaciones, gracies a la disponibilidad de munchos módulos estándares y de terceres partes.
Usóse dende los primeros díes de la Web pa escribirguiones (scripts)CGI. Ye una de les "tres Pes" (Perl, Python y PHP), que son los llinguaxes más populares pa la creación d'aplicaciones Web, y ye un componente integral de la popularsolución LAMP pal desenvolvimientu web. Grandes proyeutos escritos en Perl sonSlash,IMDb[5] yUseModWiki, un motor deWiki. Munchos sitios web con altu tráficu, comoAmazon.com yTicketmaster.com usen Perl estensamente.
Perl úsase de cutiu como un "llinguaxe pegamento", amestando sistemes yinterfaces que nun fueron diseñaos específicamente pa interoperar; y pal "escarbáu de datos", convirtiendo o procesando grandes cantidaes de datos pa xeres como por casu crear informes. Ello ye que estes fortaleces tán íntimamente xuníes. La so combinación fai a Perl una popular ferramienta de propósitu xeneral pa losAlministrador de sistemes alministradores de sistemes, especialmente en programes pequeños que pueden ser escritos y executaos nuna sola llinia de comandos.
Perl ye tamién llargamente usáu enfinances ybioinformática, onde ye apreciáu pola sodesenvuelvo rápido, tantu d'aplicaciones como d'esplegue, según l'habilidá de remanar grandes volúmenes de datos.
Perl ta implementáu como unintérprete, escritu en C, xunto con una gran coleición de módulos, escritos en Perl y C. La distribución fonte tien, en2005, 12MB cuando se empaqueta yestrúi nun ficherutar. L'intérprete tien 150.000 llinies de códigu C y secompila nunejecutable de 1 MB nesarquitectures de hardware más típiques. De forma alternativa, l'intérprete puede ser compilado como una biblioteca y serenfiñida n'otros programes. Hai cerca de 500 módulos na distribución, sumando 200.000 llinies de Perl y unes 350.000 llinies adicionales de códigu C. Enforma del códigu C nos módulos consiste en tables decodificación de calteres.
L'intérprete tien una arquiteutura empobinada a oxetos. Tolos elementos del llinguaxe Perl —esguilares,llistes,hashes, referencies a códigu, manejadores d'archivu— tán representaos nel intérprete como estructures C. Les operaciones sobre estes estructures tán definíes como una numberosa coleición de macros,typedef y funciones; esto constitúi l'API C de Perl. La API Perl puede ser esconcertante pal ensin empecipiar, pero los sos puntos d'entrada siguen un esquema de nomes coherente, qu'ayuda a los que quieran utilizala.
La execución d'un programa Perl puede estremase, generosamente, en dos fases:tiempu de compilación ytiempu d'execución.[6] En tiempu de compilación l'intérpreteparsea el testu del programa nunárbol sintácticu. En tiempu d'execución, executa'l programa siguiendo l'árbol. El testu ye parseado namái una vegada y l'árbol sintácticu yeoptimizáu antes de ser executáu, por que la fase d'execución sía relativamenteeficiente. Les optimizaciones del árbol sintácticu en tiempu de compilación inclúinsimplificación d'espresiones constantes, espardimientu del contestu yoptimización en cachos sueltos de códigu. Sicasí, les fases de compilación y execución puedenañerase: un bloqueBEGIN execútase en tiempu de compilación, ente que una funcióneval empecipia una compilación mientres una execución. Dambes operaciones tán implícites n'otres -de forma notable, la clausause que carga biblioteques, conocíes en Perl como módulos, implica un bloqueBEGIN.
Perl ye unllinguaxe dinámicu y tien unagramáticaGramátiques sensibles al contestu sensible al contestu que puede quedar afeutada pol códigu executáu mientres una fase d'execución entemedia (Ver exemplos.[7]). Por eso Perl nun puede ser parseado por aciu una aplicación direuta d'analizadores sintácticos/parseadoresLex/Yacc. Sicasí, l'intérprete implementa'l so propiu analizador léxicu, que coordináu con un parseador modificáuGNU bison resuelve les ambigüedaes del llinguaxe. Díxose que "namái perl puede parsear Perl", queriendo dicir que namái'lintérprete Perl (perl) puede parsear el llinguaxe Perl (Perl). La razón d'esto atestíguase poles persistentes imperfecciones d'otros programes qu'entamen la xera de parsear Perl, como los analizadores de códigu y los autu-indentadores, que tienen que tráteles non yá coles munches formes d'espresar inequívocamente construcciones sintáctiques, sinón tamién col fechu de que tamién Perl nun puede, polo xeneral, ser parseado ensin antes ser executáu.
Elcaltenimientu del intérprete Perl, a lo llargo de los años, volvióse cada vez más difícil. El nucleu tuvo en continuu desenvolvimientu dende1994. El códigu foi optimizáu enrendimientu por cuenta de la simplicidá, claridá y unes interfaces internes más fuertes. Nueves carauterístiques fueron añadíes, calteniendo inda, compatibilidá virtualmente completa escontra tras coles primeres versiones. El tamañu y la complexidá del intérprete son una barrera pa los desarrolladores que deseyen trabayar nél.
Perl ye distribuyíu con unos 120.000 test funcionales. Estos execútense como parte del procesu normal de construcción y comprueben estensamente al intérprete y a los sos módulos principales. Los desarrolladores Perl confíen nos test funcionales p'asegurase que los cambeos nel intérprete nun introducen errores; recíprocamente, los usuarios Perl que vean al intérprete pasar los test funcionales nel so sistema pueden tener un altu grau d'enfotu de que ta funcionando afechiscamente.
Nun hai una especificación o estándar escritu pal llinguaxe Perl y nun hai planes de crear unu pa la versión actual de Perl. Siempres esistió namái una implementación del intérprete. Esti intérprete, xunto colos test funcionales, formen la especificaciónde facto del llinguaxe.
Perl yesoftware llibre y ta llicenciáu so laLlicencia Artística y laGNU General Public License. Esistendistribuciones disponibles pa la mayoría desistemes operativos. Ta especialmente estendíu enUnix y en sistemessimilares, pero foi portáu a les plataformes más modernes (y otres más obsoletas). Con namái seis esceición confirmaes, pue ser compilado dende'lcódigu fuente en tolos Unix, compatiblesPOSIX o cualesquier otra plataforma Unix compatible. Sicasí, esto nun ye de normal necesariu, porque Perl ta incluyíu por defectu na instalación de los sistemes operativos más populares.[8]
Por cuenta de los cambeos especiales necesarios pa soportar alMac OS Classic, esiste una adautación especial llamadaMacPerl.[9]
Los usuarios deMicrosoft Windows de normal instalen una distribución binaria de Perl.[10] Compilar Perl dende'l códigu fonte so Windows ye posible, pero la mayoría de les instalaciones nun disponen del necesariu compilador de C.
La capa de emulaciónCygwin apurre otra forma de correr Perl baxu Windows. Cygwin apurre en redolada paecida al Unix en Windows qu'inclúigcc, polo que compilar Perl dende'l códigu ye una opción accesible pa los usuarios que prefieren esta opción.
En xunu de 2006, win32.perl.org foi llanzáu por Adam Kennedy en nome de laFundación Perl. Ye una comunidá web "pa tou lo rellacionao con Windows y Perl".[11]
La primer llinia contién elshebang (par de calteres qu'identifica'l testu que sigue), que lu indica al sistema operativu ónde atopar l'intérprete de Perl. La segunda imprime'lstring¡Hola mundu! y un calter denueva llinia.
Elshebang ye la forma normal pa invocar al intérprete nos sistemes Unix. Los sistemes Windows pueden siguir utilizándolo o pueden acomuñar laestensión d'archivu.pl col intérprete Perl. Dellos editores de testu tamién usen la lliniashebang como una pista sobre la manera de trabayu en que tienen d'operar. Si'l programa ye executáu por perl y non invocáu pol shell, la llinia qu'empieza polshebang ye parseada pa interpretar les opciones. N'otru casu, ye inorada. Pa ver los detalles d'esto, consultarla páxina de manual perlrun.
Un esguilar ye un solu valor; puede ser un númberu, unstring (cadena de calteres) o unareferencia
Una llista ye una coleición ordenada d'esguilares (una variable qu'almacena una llista llámasearray)
Unhash, omemoria asociativa, ye un mapeo destrings a esguilares; losstrings llámenseclaves y esguilarvalores.
Toles variables tán precedíes por un sigilo, qu'identifica'l tipu de datu que ye aportáu (non el tipu de datu de la mesma variable). Puede usase el mesmu nome pa variables de distintos tipos, ensin que tengan conflictos.
$var# un esguilar@var# un array%var# un hash
Los númberos escribir de la forma avezada; losstrings tán arrodiaos ente comines de delles clases.
$n=42;$nome="juan";$color='colloráu';
Perl va convertir losstrings en númberos y viceversa dependiendo del contestu en que sían usaos. Nel siguiente exemplu losstrings$n y$m son trataos como númberos cuando son argumentos del operador suma. Esti códigu imprime'l númberu '5', refugando cualesquier información non numbérica de la operación y dexando los valores de les variables intactos. (L'operador de concatenación nun ye+, sinón..)
$n="3 mazanes";$m="2 naranxes";print$n+$m;
Perl tamién tien un contestubooleano qu'utiliza na evaluación de declaraciones condicionales. Los siguientes valores en Perl evalúen toos como falsu:
$falsu=0;# el númberu cero $falsu =0.0;# el númberu cero como flotante $falsu ='0';# el string cero $falsu ="";# el string vacíu $falsu =undef;# el valor devueltu por undef
Tolos demás valores evaluar a verdaderu. Esto inclúi'l curiosustring autu-descriptivu"0 pero verdaderu", que de fechu ye 0 como númberu, pero verdaderu como booleano. (Cualesquierstring non numbéricu tamién va tener esta propiedá, pero estistring en particular ye ignoráu por Perl en contestos numbéricos). Les espresiones booleanas evaluaes tamién devuelven valores esguilares. Anque la documentación nun indica qué valorparticular devuélvese como verdaderu o falsu (y polo tanto non fiable), munchos operadores booleanos devuelven 1 por verdaderu y elstring vacíu pa falsu (qu'evalúa a cero en contestu numbéricu). La funcióndefined() diz-y si la variable tien dalgún valor. Nel exemplu anteriordefined($falsu) va ser verdaderu con cada unu de los valores anteriores, sacanteundef.Si, específicamente, quier asegurase de tener un resultáu 1/0 (como en C), precisa realizar el cálculu siguiente:
my$resultáu_real=$resultancia_booleano?1:0;
Una llista defínese listando los sos elementos, dixebraos por comes y arrodiaos por paréntesis onde asina sía riquíu pola precedencia de los operadores.
@puntuaciones=(32,45,16,5);
Unhash puede ser inicializado dende una llista de pares clave/valor.
%favoritu=(joe=>'colloráu',sam=>'azul',);
Los elementos individuales d'una llista son aportaos utilizando un índiz numbéricu, dientro de corchetes. Valores individuales nun hash son aportaos utilizando la correspondiente clave, dientro de llaves. El sigilo$ identifica que l'elementu aportáu ye un esguilar.
$puntuaciones[2]# un elementu de puntuaciones favoritu{joe} # un valor de %favoritu
Múltiples elementos pueden ser aportaos usando nel so llugar el sigilo@ (identificando la resultancia como una llista).
@puntuaciones[2,3,1]# tres elemento de puntuaciones favoritu{'joe', 'sam'} # dos valores de %favoritu
El númberu d'elementos nun array puede ser llográu evaluando'larray en contestu esguilar o cola ayuda del sigilo$#. Esti postreru da l'índiz del últimu elementu dientro delarray, non el númberu d'elementos.
$numbero=@amigos;$#amigos;# l'índiz del últimu elementu n'amigos amigos+1; # de normal el númberu d'elementos en @amigos, #queyeunumásque$#amigosporque'l primer elementu tien l'índiz0,non1
Hai unes poques funciones qu'operen sobrehashes enteros.
@nomes_de_veceros=keys%direiciones;# guarda en @nomes_de_veceros toles claves de %direiciones@direcciones_de_email=values%direiciones;# guarda en @direcciones_de_email tolos valores de %direiciones
Tien estructures de control empobináu al bloque, similar a los de los llinguaxes de programación C y Java. Les condiciones tán arrodiaes por paréntesis y los bloques subordinaos por llaves:
grep devuelve tolos elementos dellista en que'l bloque subordináu evalúa a verdaderu.map evalúa'l bloque subordináu per cada elementu dellista y devuelve una llista de los valores resultantes. Estes construcciones dexen un estilu simple de programación funcional.
Ladeclaración switch (llamada "given"/"when") esiste dende la versión 5.10:
use5.10.1;# o posteriorgiven($variable){when(''condición''){...}when(''condición''){...}default{...}}
Perl inclúi una declaracióngotoetiqueta, pero ye usada raramente. Les situaciones onde n'otros llinguaxes utilízasegoto nun asoceden tan de cutiu en Perl por cuenta de les sos amplies opciones de control de fluxu.
Esiste tamién una declaracióngoto &sub que realiza una llamada 'final'. Termina la subrutina actual y darréu llama a lasub especificada. Esto úsase en situaciones onde una nueva subrutina puede realizar una xestión de lapila más eficiente que'l mesmu Perl (porque típicamente nun se riquir nengún cambéu na pila actual), y nuna recursión bien fonda esti tipu de llamaes puede tener un sustancial impautu positivu nel funcionamientu porque evita la sobrecarga de la xestión contexto/pila nel momentu de retornar.
Lessubrutines definir cola pallabra clavesub ya invocaes a cencielles nomándoles. Si la subrutina en cuestión nun foi inda declarada, ye necesariu, pal procesu d'analís sintácticu, poner los paréntesis.
foo();# paréntesis necesarios equí...subfoo{...}foo;#... pero non equí
Una llista d'argumentos pueden ser indicaos dempués del nome de la subrutina. Los argumentos pueden ser esguilares, llistes ohashes.
foo$x,@y,%z;
Los parámetros d'una subrutina nun precisen ser declaraos, nin en númberu nin en tipu; ello ye que pueden variar en cada llamada. Losarrays son espandíos a los sos elementos, loshashes a una llista de pares clave/valor y tol conxuntu ye pasáu a la subrutina como una indiferenciada llista d'esguilares.
Cualesquier de los argumentos pasaos tán disponibles pa la subrutina nelarray especial@_. Los elementos de@_ son acomuñaos a los argumentos actuales; camudando un elementu de@_ camuda l'argumentu correspondiente.
Los elementos de@_ pueden ser aportaos colos subíndices de la forma normal.
$_[0],$_[1]
Sicasí, el códigu resultante pue ser malo de lleer y los parámetros tener una semántica de pase per referencia, que puede resultar daqué non deseable.
Un modismu común ye asignar@_ a una llista de variables con nomes.
my($x,$y,$z)=@_;
Esto afecta tantu a la mnemónica de los nomes de los parámetros como a la semántica de los valores pasaos por valor. La pallabra clavemy indica que les siguientes variables tán léxicamente enfiñíes nel bloque que les contienen.
Otru modismu ye sacar los parámetros de@_. Esto ye bien común cuando la subrutina toma un namái argumentu.
my$x=shift;# Si nun se diz nada, referímonos a @_
Les subrutinas pueden devolver valores.
return42,$x,@y,%z;
Si la subrutina nun sale vía declaraciónreturn, entós devuelve la última espresión evaluada nel cuerpu de la subrutina.Arrays yhashes nel valor de torna son espandíos a una llista d'esguilares, igual que si fueren argumentos d'una función.
La espresión devuelta ye evaluada nel contestu de la llamada de la subrutina; esto puede sorprender al despreveníu.
subllista{(4,5,6)}subarray{@x=(4,5,6);@x}$x=llista;# devuelve 6 - últimu elementu de la llista $x=array;# devuelve 3 - númberu d'elementos de la llista @x=llista;# devuelve (4, 5, 6)@x=array;# devuelve (4, 5, 6)
Una subrutina puede afayar el so contestu de llamada cola funciónwantarray.
El llinguaxe Perl inclúi una sintaxis especializada pa escribirespresiones regulares y l'intérprete contién un motor pa empareyarstrings con espresiones regulares. El motor d'espresiones regulares usa un algoritmu deVuelta Tras (backtracking), estendiendo les sos capacidaes dende'l simple axugamientu de patrones simples cola captura y sustitución destrings. El motor d'espresiones regulares derivar deregex, escritu porHenry Spencer.
La sintaxis d'espresiones regulares foi orixinalmente tomada de les espresiones regulares de Unix Versión 8. Sicasí, estremóse yá antes del primer llanzamientu de Perl y dende entós foi incorporando munches más carauterístiques. Otros llinguaxes y aplicaciones tán adoptando lesespresiones regulares de Perl (PCRE) en cuenta de les espresiones regularesPOSIX, incluyendo PHP, Ruby, Java y elServidor HTTP Apache.
L'operadorm// (empareya) dexa comprobar un axugamientu per mediu d'una espresión regular. (Pa embrivir, el precedentem puede ser omitíu.) Nel casu más simple, una espresión como:
$x=~m/abc/
evalúa a verdaderusi y namái si elstring$x empareya cola espresión regularabc.
Partes de la espresión regular pueden ser incluyíes ente paréntesis: les partes correspondientes d'un string empareyáu sonprindaes. Losstrings prindaos son asignaos de forma secuencial a les variables internes$1, $2, $3,... y una llista destrings prindaos devuélvese como valor del axugamientu.
$x=~m/a(.)c/;# prinda'l calter ente 'a' y 'c' y guardar en $1
L'operadors/// (sustitución) especifica una operación de busca y reemplazu:
$x=~s/abc/aBc/;# Convierte la b en mayúscula
Les espresiones regulares en Perl pueden tomar unosmodificadores. Son sufixos d'una sola lletra que modifiquen el significáu de la espresión:
$x=~m/abc/i;# axugamientu independientemente de si tán en mayúscula o minúscula $x=~s/abc/aBc/g;# busca y reemplazu global (a lo llargo de tol ''string'')
Les espresiones regulares pueden ser trupes y críptiques. Esto ye porque la sintaxis de les espresiones regulares ye desaxeradamente compacta, xeneralmente usando calteres sueltos o pares de calteres que representen les sos operaciones. Perl sollivia un pocu esti problema col modificador/x que dexa a los programadores poner espaciu en blancu y comentariosdientro de les espresiones regulares:
$x=~m/a # empareya una 'a' . # empareya cualquier calter c # empareya una 'c' /x;
Un usu común de les espresiones regulares ye'l d'especificar allindiadores de campos al operadorsplit:
@pallabres=splitm/,/,$llinia;# estrema la llinia de valores separaos por comes
L'operadorsplit complementa la captura de string. La captura de string devuelve les partes d'un string qu'empareyen con una espresión regular;split devuelve les partes que nun empareyar.
Perl ta llargamente favorecíu pa les aplicaciones debases de datos. Les sos facilidaes de manexu de testu son bones pa xenerar consultesSQL;arrays,hashes y la xestión de memoria automática fai fácil recoyer y procesar los datos devueltos.
Nes primeres versiones de Perl, les interfaces de bases de datos fueron creaes enllazando l'intérprete con una biblioteca de base de datos dende'l llau del veceru. Esto yera daqué cabileñu; un problema en particular foi que'l ejecutableperl resultante taba acutáu a usar namái una interfaz de base de datos, la que fuera enllazada. Tamién, reenlazar l'intérprete yera lo suficientemente dificultosu que namái foi realizáu pa delles de les más famoses ya importantes bases de datos.
En Perl 5, les interfaces de bases de datos tán implementaes pol móduluPerl DBI. El móduluDBI presenta una única interfaz a les aplicaciones Perl, independiente de les bases de datos, ente que los módulosDBD:: (Controlador de base de datos) remanen los detalles d'accesu a unes 50 bases de datos distintos. Esisten controladoresDBD:: pa la mayor parte de les bases de datosANSI SQL.
El"Computer Language Shootout Benchmarks" compara'l funcionamientu de implementaciones de problemes de programación típicos, en diversos llinguaxes. Los sos implementaciones Perl de normal tomen más memoria que les implementaciones n'otros llinguaxes, y esto varia los resultaos de velocidá. Les prestaciones de Perl son similares a les d'otros llinguaxes como Python, PHP o Ruby, pero más lentu que la mayor parte de llinguaxes compilados.
Perl puede ser más lentu qu'otros llinguaxes faciendo lo mesmo porque tien que compilar el códigu fonte cada vez que cuerre'l programa. En"A Timely Start", Jean-Louis Leroy atopó que los sos scripts en Perl tardaben muncho más tiempu en correr que lo qu'él esperaba porque l'intérprete perl perdía la mayor parte del tiempu buscando y compilando los módulos. Como Perl nun puede salvar el so compilación entemedia como la faen Java, Python y Ruby, los scripts Perl traen esta sobrecarga en cada execución. La sobrecarga nun ye un problema cuando la fase d'execución ye bien llarga, pero puede sesgar significativamente en tiempos d'execución bien curtios, como s'atopa de cutiu nos benchmarks. Una vegada que perl empecipia la fase d'execución, sicasí, pue ser bien rápido y típicamente supera a otros llinguaxes dinámicos. Teunoloxíes comomod perl superen esto guardando'l programa compilado en memoria ente execuciones, oClass::Autouse que retrasa la compilación de partes del programa hasta que son necesaries.
Optimizar Perl puede riquir una conocencia íntima del so funcionamientu en llugar de la maña col llinguaxe y la so sintaxis, significando que'l problema ta cola implementación de Perl en llugar de col llinguaxe mesmu. Perl 6, la siguiente versión, va tomar dalgunes d'estes idees como lleiciones, qu'otros llinguaxes yá aprendieron.
Nel añu 2000, naconferencia Perl,Jon Orwant fixo un pidimientu pa una nueva versión del llinguaxe.[12] Esto condució a una decisión pa empezar el trabayu del rediseño del llinguaxe, que se llamaría Perl 6. Pidiéronse propuestes a la comunidá Perl pa les nueves carauterístiques del llinguaxe, y recibiéronse más de 300 RFC (del inglésRequest For Comments, pidimientu de comentarios).
Larry Wall tuvo los siguientes años dixiriendo los RFC y sintetizándolos nuna redolada de trabayu coherente pa Perl 6. Presentó'l so diseñu de Perl 6 nuna serie de documentos llamaosApocalipsis, que se numberen pa correspondese colos capítulos deProgramming Perl. L'actual, inacabada especificación de Perl 6, ta resumida nunos documentos de diseñu llamaos Sinopsis, que tán numberaos pa corresponder a los Apocalipsis.
Perl 6 nun tien la intención de ser compatible pa tras, anque va esistir una manera de compatibilidá.
En2001 decidióse que Perl 6 corriera nunamáquina virtual llamadaParrot. Esto quier dicir qu'otros llinguaxes qu'usen Parrot van poder ganar accesu nativu a CPAN y va dexar dalgún ciertu nivel de desenvolvimientu cruzáu.
En2005Audrey Tang creó'l proyeutupugs, una implementación de Perl 6 enHaskell. Foi y ye una plataforma de testeo del llinguaxe Perl 6 (separáu del desenvolvimientu actual de la implementación) dexando a los diseñadores esplorar. El proyeutu pugs nició una activa comunidá Perl/Haskell centrada alredor de la canal irc #perl6 enFreenode.
Un ciertu númberu de carauterístiques nel llinguaxe Perl 6 amuesen una similaridad coles de Haskell y Perl 6 foi acoyíu pola comunidá Haskell como un potencial llinguaxe de scripting.
Nel2006, Perl 6, Parrot y pugs siguen tando baxu desenvolvimientu y un nuevu módulu pa Perl 5 llamáuv6 dexa a una parte del códigu Perl 6 correr direutamente sobre Perl 5.
Como en C, les competiciones decódigu cégaru son una traza popular de la cultura Perl. L'Obfuscated Perl contest homenaxa la virtú de la flexibilidá sintáctica de Perl. El programa siguiente imprime'l testu "Just another Perl / Unix hacker", usando 32 procesos en paralelu coordinaos con pipes. La esplicación completa ta disponible enel sitiu web del autor.
De forma similar al códigu cégaru pero con un propósitu distintu, "Poesía Perl" ye la práctica d'escribir poemes que puedan ser compilados como códigu llegal de Perl (anque xeneralmente ensin sentíu). Esta afición ye más o menos única en Perl debíu al gran númberu de pallabres normales del Inglés que'l llinguaxe utiliza. Los nuevos poemes publicar de forma regular nel sitiuPerl Monks, na seiciónPoesía Perl. Parte del saber de Perl ta enBlack Perl, un exemplu infame de la poética de Perl.
Otru pasatiempu ye "Perl Golf". Como coldeporte real, la meta ye amenorgar el númberu de golpes necesarios pa completar un oxetivu, pero equí, los "golpes" referir a los pulsaciones de tecláu en cuenta de a los percorríos nun club de golf. Propónse una xera, como "escaniar un string d'entrada y devolver elpalíndromu más grande que contenga" y los participantes intenten bater a los sos oponentes escribiendo soluciones que rican cada vegada menos calteres de códigu fuente Perl.
Otra tradición ente loshacker Perl ye escribir JAPH, que ye una especie de pequeños programes cégaros qu'imprimen la frase "Just another Perl hacker,". El "canónicu" JAPH inclúi la coma a la fin, anque de cutiu omítese, y otres munches variantes que se crearon (exemplu,[13] qu'imprime "Just Another Perl Pirate!").
Un módulu Perl interesante yeLingua::Romana::Perligata(en CPAN). Esti módulu traduz el códigu fonte d'un script escritu en Llatín a Perl, dexando al programador escribir programes ejecutables enLlatín.
La comunidá Perl acutó l'espaciu de nomes "Acme" pa los módulos que sían risonderos o esperimentales. Dalgunos de los módulos Acme tán implementaos de maneres bien entreteníes. Dellos exemplos:
Acme::Bleach, unu de losprimeros módulos en Acme::Archiváu 2014-07-07 enWayback Machine, dexa al códigu fonte d'un programa ser "blanquiáu" (esto ye, tolos calteres son reemplazaos pel espaciu en blancu) y siguir funcionando. Ye un exemplu d'unfiltru de códigu fuente. Hai tamién un ciertu númberu d'otros filtros de fonte nel espaciu de nomes Acme.
Acme::Hello simplifica'l procesu d'escribir un programa "Hello, World!"
Acme::Currency dexa camudar el prefixu "$" de les variables esguilares por otru calter (por defectu usa'leuru "€")
Acme::ProgressBar ye, dafechu fechu de camín, una horrible ya ineficiente forma d'indicar el progresu d'una xera *