Diferencies ente revisiones de «Perl»

Contenido eliminado Contenido añadido
Sin resumen de edición
Xqbot (alderique | contribuciones)
m Bot: Reemplace la etiqueta obsoleta <source> y el parámetro "enclose"; cambios cosméticos
Llinia 8:
Larry Wall empezó a trabayar en Perl en [[1987]] mientres trabayaba como programador en [[Unisys]]<ref name="larry-wall-snippet">{{cita web|títulu=Larry Wall|url=http://www.perl.com/pub/au/Wall_Larry|fechaaccesu=20 d'agostu de 2006|urlarchivu=https://web.archive.org/web/20060815160146/http://www.perl.com/pub/au/Wall_Larry|fechaarchivu=15 d'agostu de 2006}} (inglés)</ref> y anunció la versión 1.0 nel [[newsgroup|grupu de noticies]] comp.sources.misc el [[18 d'avientu]] de 1987. El llinguaxe espandióse rápido nos siguientes años. Perl 2, publicáu en [[1988]], apurrió un meyor motor d'espresiones regulares. Perl 3, publicáu en [[1989]], añedió soporte pa datos binarios.
 
Hasta [[1991]] la única documentación de Perl yera una simple (y cada vez más llarga) páxina de manual Unix. En 1991 publicóse ''[[Programming
Perl]]'' (el llibru del [[Camelus dromedarius|camellu]]) y convirtióse na referencia ''de 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.
 
Llinia 46:
 
=== Carauterístiques ===
La estructura completa de Perl deriva llargamente del llinguaxe [[Llinguaxe de programación C|C]]. Perl ye un [[Programación imperativa|llinguaxe imperativu]], con [[Variable (programación)|variables]], [[Espresión (programación)|espresiones]], asignaciones, bloques de códigu delimitados por [[Paréntesis|llaves]], [[estructures de control]] y [[subrutina|subrutinas]]s.
 
Perl tamién toma carauterístiques de la programación [[Unix shell|shell]]. Toles variables son marcaes con un [[Sigilo]] 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 les [[cadena de carácter|cadenes de calteres]] (''[[string]]''). Como nos shell, Perl tien munches funciones integraes pa xeres comunes y p'aportar a los recursos del sistema.
Llinia 61:
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|tipu de datu dinámicu]]; ''strings'', llistes y ''hashes''; espresiones regulares; introspeición y una función <code>eval()</code>.
 
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 la [[Codificació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 colecció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'' y ''hashes'' tienen distintu sigilo. Índices de ''array'' y claves ''hash'' usen distintes clases de paréntesis. ''Strings'' y espresiones regulares tienen distintes allindiadores estándar. Esti aproximamientu puede oldease con llinguaxes como [[Lisp]], onde la mesma construcción ''S-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 la [[programación imperativa|imperativa]], [[Programación funcional|funcional]] y la [[Programació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 de ''Programming 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 la [[heurí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 de <code>perlfunc(1)</code> diz "Polo xeneral, faen lo qu'el to quieras, siempres que quieras la coherencia."
Llinia 72:
 
=== Aplicaciones ===
[[FileFicheru:LAMP software bundle.svg|thumbminiaturadeimagen|250px|La [[LAMP]] entiendi Perl (equí con [[Squid (programa)|Squid]])]]
Perl tien munches y variaes aplicaciones, gracies a la disponibilidad de munchos módulos estándares y de terceres partes.
 
Llinia 120:
=== Programa exemplu ===
En Perl, el programa canónicu "[[Hola mundu]]" ye:
<sourcesyntaxhighlight lang="perl">#!/usr/bin/perl
print "¡Hola mundu!\n";</sourcesyntaxhighlight>
La primer llinia contién el ''[[shebang]]'' (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'l ''string'' ''¡Hola mundu!'' y un calter de [[nueva llinia]].
 
Llinia 127:
 
=== Tipos de datos ===
Perl tien trés [[Tipu de dato|tipo de datos]]: [[Esguilar (informática)|esguilares]], [[Llista (estructura de datos)|llistes]]
y [[Tabla hash|hashes]]:
* Un esguilar ye un solu valor; puede ser un númberu, un ''string'' (cadena de calteres) o una [[referencia]]
Llinia 134:
 
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.
<sourcesyntaxhighlight lang="perl">
$var # un esguilar
@var # un array
%var # un hash
</syntaxhighlight>
</source>
Los númberos escribir de la forma avezada; los ''strings'' tán arrodiaos ente comines de delles clases.
<sourcesyntaxhighlight lang="perl">
$n = 42;
$nome = "juan";
$color = 'colloráu';
</syntaxhighlight>
</source>
Perl va convertir los ''strings'' en númberos y viceversa dependiendo del contestu en que sían usaos. Nel siguiente exemplu los ''strings'' <code>$n</code> y <code>$m</code> 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 <code>+</code>, sinón <code>.</code>.)
<sourcesyntaxhighlight lang="perl">
$n = "3 mazanes";
$m = "2 naranxes";
print $n + $m;
</syntaxhighlight>
</source>
Perl tamién tien un contestu [[Tipu de datu lóxicu|booleano]] qu'utiliza na evaluación de declaraciones condicionales. Los siguientes valores en Perl evalúen toos como falsu:
<sourcesyntaxhighlight lang="perl">
$falsu = 0; # el númberu cero $falsu =
0.0; # el númberu cero como flotante $falsu =
Llinia 158:
""; # el string vacíu $falsu =
undef; # el valor devueltu por undef
</syntaxhighlight>
</source>
Tolos demás valores evaluar a verdaderu. Esto inclúi'l curiosu ''string'' autu-descriptivu <code>"0 pero verdaderu"</code>, que de fechu ye 0 como númberu, pero verdaderu como booleano. (Cualesquier ''string'' non numbéricu tamién va tener esta propiedá, pero esti ''string'' 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é valor ''particular'' devuélvese como verdaderu o falsu (y polo tanto non fiable), munchu operadores booleanos devuelven 1 por verdaderu y el ''string'' vacíu pa falsu (qu'evalúa a cero en contestu numbéricu). La función ''defined()'' diz-y si la variable tien dalgún valor. Nel exemplu anterior ''defined($falsu)'' va ser verdaderu con cada unu de los valores anteriores, sacante ''undef''.
Si, específicamente, quier asegurase de tener un resultáu 1/0 (como en C), precisa realizar el cálculu siguiente:
<sourcesyntaxhighlight lang="perl">
my $resultáu_real = $resultancia_booleano ? 1 : 0;
</syntaxhighlight>
</source>
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.
<sourcesyntaxhighlight lang="perl">
@puntuaciones = (32, 45, 16, 5);
</syntaxhighlight>
</source>
Un ''hash'' puede ser inicializado dende una llista de pares clave/valor.
<sourcesyntaxhighlight lang="perl">
%favoritu = (
joe => 'colloráu', sam
=> 'azul', );
 
</syntaxhighlight>
</source>
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 <tt>$</tt> identifica que l'elementu aportáu ye un esguilar.
<sourcesyntaxhighlight lang="perl">
$puntuaciones[2] # un elementu de puntuaciones favoritu{joe} # un valor de %favoritu </sourcesyntaxhighlight>
 
Múltiples elementos pueden ser aportaos usando nel so llugar el sigilo <tt>@</tt> (identificando la resultancia como una llista).
<sourcesyntaxhighlight lang="perl">
@puntuaciones[2, 3, 1] # tres elemento de puntuaciones favoritu{'joe', 'sam'} # dos valores de %favoritu </sourcesyntaxhighlight>
 
El númberu d'elementos nun array puede ser llográu evaluando'l ''array'' en contestu esguilar o cola ayuda del sigilo <tt>$#</tt>. Esti postreru da l'índiz del últimu elementu dientro del ''array'', non el númberu d'elementos.
<sourcesyntaxhighlight lang="perl">
$numbero = @amigos;
$#amigos; # l'índiz del últimu elementu n'amigos amigos+1; # de normal el númberu d'elementos en @amigos, #
que ye unu más que $#amigos porque'l primer elementu tien l'índiz 0, non 1
</syntaxhighlight>
</source>
Hai unes poques funciones qu'operen sobre ''hashes'' enteros.
<sourcesyntaxhighlight lang="perl">
@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
</syntaxhighlight>
</source>
 
=== Estructures de control ===
Llinia 200:
 
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:
<sourcesyntaxhighlight lang="perl">
''etiqueta'' while ( ''condición'' ) {... }
''etiqueta'' while ( ''condición'' ) {... } continue {... }
Llinia 209:
if ( ''condición'' ) {... } else {... }
if ( ''condición'' ) {... } elsif ( ''condición'' ) {... } else {... }
</syntaxhighlight>
</source>
Cuando se controla a una sola declaración, los modificadores de declaración apurren una sintaxis más llixera:
<sourcesyntaxhighlight lang="perl">
''declaración'' if ''condición'';
''declaración'' unless ''condición'';
Llinia 217:
''declaración'' until ''condición'';
''declaración'' foreach ''llista'';
</syntaxhighlight>
</source>
El operadores lóxicos ''cortucircuitu'' son de normal usaos pa controlar el fluxu del programa a nivel d'espresión:
<sourcesyntaxhighlight lang="perl">
''expr'' and ''expr''
''expr'' or ''expr''
</syntaxhighlight>
</source>
Les pallabres clave de control de fluxu <code>next</code>, <code>last</code>, <code>return</code> y <code>redo</code> son espresiones, polo que pueden ser usaes con el operadores cortucircuitu.
 
Perl tamién tien dos construcciones implícites pa bucles:
<sourcesyntaxhighlight lang="perl">
''resultancies'' = grep {... } ''llista''
''resultancies'' = map {... } ''llista''
</syntaxhighlight>
</source>
<code>grep</code> devuelve tolos elementos de ''llista'' en que'l bloque subordináu evalúa a verdaderu. <code>map</code> evalúa'l bloque subordináu per cada elementu de ''llista'' y devuelve una llista de los valores resultantes. Estes construcciones dexen un estilu simple de programación funcional.
 
La [[switch|declaración switch]] (llamada "given"/"when") esiste dende la versión 5.10:
<sourcesyntaxhighlight lang="perl">
use 5.10.1; # o posterior
given ($variable) {
Llinia 240:
default { ... }
}
</syntaxhighlight>
</source>
 
Perl inclúi una declaración <code>goto ''etiqueta''</code>, pero ye usada raramente. Les situaciones onde n'otros llinguaxes utilízase <code>[[GOTO|goto]]</code> nun asoceden tan de cutiu en Perl por cuenta de les sos amplies opciones de control de fluxu.
Llinia 247:
 
=== Subrutinas ===
Les [[subrutina|subrutinas]]s definir cola pallabra clave <code>sub</code> 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.
<sourcesyntaxhighlight lang="perl">
foo(); # paréntesis necesarios equí...
sub foo {... }
foo; #... pero non equí </sourcesyntaxhighlight>
 
Una llista d'argumentos pueden ser indicaos dempués del nome de la subrutina. Los argumentos pueden ser esguilares, llistes o ''hashes''.
<sourcesyntaxhighlight lang="perl">
foo $x, @y, %z;
</syntaxhighlight>
</source>
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. Los ''arrays'' son espandíos a los sos elementos, los ''hashes'' a una llista de pares clave/valor y tol conxuntu ye pasáu a la subrutina como una indiferenciada llista d'esguilares.
 
Llinia 262:
 
Los elementos de <code>@_</code> pueden ser aportaos colos subíndices de la forma normal.
<sourcesyntaxhighlight lang="perl">
$_[0], $_[1]
</syntaxhighlight>
</source>
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 <code>@_</code> a una llista de variables con nomes.
<sourcesyntaxhighlight lang="perl">
my($x, $y, $z) = @_;
</syntaxhighlight>
</source>
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 clave <code>my</code> indica que les siguientes variables tán léxicamente enfiñíes nel bloque que les contienen.
 
Otru modismu ye sacar los parámetros de <code>@_</code>. Esto ye bien común cuando la subrutina toma un namái argumentu.
<sourcesyntaxhighlight lang="perl">
my $x = shift; # Si nun se diz nada, referímonos a @_
</syntaxhighlight>
</source>
Les subrutinas pueden devolver valores.
<sourcesyntaxhighlight lang="perl">
return 42, $x, @y, %z;
</syntaxhighlight>
</source>
Si la subrutina nun sale vía declaración <code>return</code>, entós devuelve la última espresión evaluada nel cuerpu de la subrutina. ''Arrays'' y ''hashes'' 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 sosprender al despreveníu.
<sourcesyntaxhighlight lang="perl">
sub llista { (4, 5, 6) }
sub array { @x = (4, 5, 6); @x }
Llinia 292:
= llista; # devuelve (4, 5, 6)
@x = array; # devuelve (4, 5, 6)
</syntaxhighlight>
</source>
Una subrutina puede afayar el so contestu de llamada cola función <code>wantarray</code>.
<sourcesyntaxhighlight lang="perl">
sub cualesquier { wantarray ? (1, 2) : "Naranxes" }
$x = cualesquier; # devuelve "Naranxes"
@x = cualesquier; # devuelve (1, 2)
</syntaxhighlight>
</source>
 
=== Espresiones regulares ===
Llinia 308:
 
L'operador <code>m//</code> (empareya) dexa comprobar un axugamientu per mediu d'una espresión regular. (Pa embrivir, el precedente <code>m</code> puede ser omitíu.) Nel casu más simple, una espresión como:
<sourcesyntaxhighlight lang="perl">
$x =~ m/abc/
</syntaxhighlight>
</source>
evalúa a verdaderu [[Coimplicación|si y namái si]] el ''string'' <code>$x</code> empareya cola espresión regular <code>abc</code>.
 
Partes de la espresión regular pueden ser incluyíes ente paréntesis: les partes correspondientes d'un string empareyáu son ''prindaes''. Los ''strings'' prindaos son asignaos de forma secuencial a les variables internes <code>$1, $2, $3,...</code> y una llista de ''strings'' prindaos devuélvese como valor del axugamientu.
<sourcesyntaxhighlight lang="perl">
$x =~ m/a(.)c/; # prinda'l calter ente 'a' y 'c' y guardar en $1
</syntaxhighlight>
</source>
L'operador <code>s///</code> (sustitución) especifica una operación de busca y reemplazu:
<sourcesyntaxhighlight lang="perl">
$x =~ s/abc/aBc/; # Convierte la b en mayúscula </sourcesyntaxhighlight>
 
Les espresiones regulares en Perl pueden tomar unos ''modificadores''. Son sufixos d'una sola lletra que modifiquen el significáu de la espresión:
<sourcesyntaxhighlight lang="perl">
$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 too el ''string'')
</syntaxhighlight>
</source>
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 <code>/x</code> que dexa a los programadores poner espaciu en blancu y comentarios ''dientro'' de les espresiones regulares:
<sourcesyntaxhighlight lang="perl">
$x =~ m/a # empareya una 'a'
. # empareya cualquier calter
c # empareya una 'c'
/x;
</syntaxhighlight>
</source>
Un usu común de les espresiones regulares ye'l d'especificar allindiadores de campos al operador <code>split</code>:
<sourcesyntaxhighlight lang="perl">
@pallabres = split m/,/, $llinia; # estrema la llinia de valores separaos por comes
</syntaxhighlight>
</source>
L'operador <code>split</code> complementa la captura de string. La captura de string devuelve les partes d'un string qu'empareyen con una espresión regular; <code>split</code> devuelve les partes que nun empareyar.
 
Llinia 376:
 
<!-- Esti códigu usar con permisu. See Talk: english page. -->
<sourcesyntaxhighlight lang="perl">
@P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{
@p{"r$p","o$p"}=(P,P);pipe"r$p","o$p";++$p;($q*=2)+=$f=!fork;map{$P=$P[$f^ord
($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/&&
close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\S/;print</sourcesyntaxhighlight>
 
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 sitiu [[Perl Monks]], na seición [http://www.perlmonks.org/index.pl?node=Perl%20Poetry Poesía Perl]. Parte del saber de Perl ta en [[Black Perl]], un exemplu infame de la poética de Perl.
Llinia 443:
* [http://www.parrotcode.org/ Parrot máquina virtual]
 
;Distribuciones
* [http://www.cpan.org/ The CPAN] – ''Comprehensive Perl Archive Network'', distribución fonte de Perl
* [http://www.activestate.com/ ActiveState ActivePerl] – Perl para [[Microsoft Windows]] y otres plataformes
Llinia 462:
[[Categoría:Llinguaxe de programación]]
[[Categoría:Software de 1987]]
 
 
[[Categoría:Wikipedia:Revisar traducción]]
[[Categoría:Wikipedia:Páxines con enllaces interllingüísticos]]