2013-09-18 18:58:59 +00:00
|
|
|
---
|
|
|
|
name: perl
|
|
|
|
category: language
|
|
|
|
language: perl
|
|
|
|
filename: learnperl-es.pl
|
|
|
|
contributors:
|
2013-09-20 06:23:20 +00:00
|
|
|
- ["Korjavin Ivan", "http://github.com/korjavin"]
|
|
|
|
translators:
|
2013-09-18 18:58:59 +00:00
|
|
|
- ["Francisco Gomez", "http://github.com/frncscgmz"]
|
2014-08-24 20:42:11 +00:00
|
|
|
- ["Joaquín Ferrero", "http://github.com/joaquinferrero"]
|
2013-09-20 06:23:20 +00:00
|
|
|
lang: es-es
|
2013-09-18 18:58:59 +00:00
|
|
|
---
|
|
|
|
|
2020-06-10 10:48:01 +00:00
|
|
|
Perl es un lenguaje de programación altamente capaz, rico en características, con más de 25 años de desarrollo.
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2020-06-10 10:48:01 +00:00
|
|
|
Perl corre en más de 100 plataformas, desde portátiles hasta ordenadores centrales, y es adecuado para realizar desde prototipos rápidos hasta desarrollar proyectos a gran escala.
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
```perl
|
2014-08-24 20:42:11 +00:00
|
|
|
# Comentarios de una sola línea con un carácter hash
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
#### Tipos de variables en Perl
|
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
# Las variables comienzan con el símbolo $
|
|
|
|
# Un nombre de variable válido empieza con una letra o un guión bajo,
|
|
|
|
# seguido por cualquier número de letras, números o guiones bajos
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
### Perl tiene tres tipos principales de variables: escalares, arreglos y hashes
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
## Escalares
|
|
|
|
# Un escalar representa un solo valor:
|
|
|
|
my $animal = "camello";
|
|
|
|
my $respuesta = 42;
|
|
|
|
|
2020-06-10 10:48:01 +00:00
|
|
|
# Los valores escalares pueden ser cadenas de caracteres, números enteros o
|
2014-08-24 20:42:11 +00:00
|
|
|
# de punto flotante; Perl automáticamente los convertirá como sea requerido
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
## Arreglos
|
|
|
|
# Un arreglo representa una lista de valores:
|
2014-08-24 20:56:09 +00:00
|
|
|
my @animales = ("camello","llama","buho"};
|
|
|
|
my @numeros = (23, 42, 69);
|
|
|
|
my @mixto = ("camello", 42, 1.23);
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
## Hashes
|
2014-08-24 20:42:11 +00:00
|
|
|
# Un hash representa un conjunto de pares llave/valor:
|
2014-08-24 20:56:09 +00:00
|
|
|
my %color_fruta = ("manzana","rojo","banana","amarillo");
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
# Puede usar un espacio en blanco y el operador "=>" para asignarlos más fácilmente
|
2013-09-18 18:58:59 +00:00
|
|
|
my %color_fruta = (
|
|
|
|
manzana => "rojo",
|
|
|
|
banana => "amarillo",
|
2014-08-24 20:56:09 +00:00
|
|
|
);
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
# Los escalares, arreglos y hashes están más documentados en perldata (perldoc perldata)
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2020-06-10 10:48:01 +00:00
|
|
|
# Los tipos de datos más complejos se pueden construir utilizando
|
2014-08-24 20:42:11 +00:00
|
|
|
# referencias, las cuales le permiten construir listas y hashes dentro
|
|
|
|
# de listas y hashes
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
#### Estructuras condicionales y de ciclos
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
# Perl tiene la mayoría de las estructuras condicionales y de ciclos más comunes
|
2013-09-18 18:58:59 +00:00
|
|
|
if ( $var ) {
|
2014-08-24 20:42:11 +00:00
|
|
|
...;
|
2020-06-10 10:48:01 +00:00
|
|
|
} elsif ( $var eq 'bar' ) {
|
2014-08-24 20:42:11 +00:00
|
|
|
...;
|
2013-09-18 18:58:59 +00:00
|
|
|
} else {
|
2014-08-24 20:42:11 +00:00
|
|
|
...;
|
2013-09-18 18:58:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
unless ( condicion ) {
|
2014-08-24 20:42:11 +00:00
|
|
|
...;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Esto se ofrece como una versión más fácil de leer que "if (!condición)"
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
# La postcondición al modo Perl:
|
2013-09-18 18:58:59 +00:00
|
|
|
print "Yow!" if $zippy;
|
|
|
|
print "No tenemos bananas" unless $bananas;
|
|
|
|
|
|
|
|
# while
|
2014-08-24 20:42:11 +00:00
|
|
|
while ( condicion ) {
|
|
|
|
...;
|
|
|
|
}
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
# for y foreach
|
|
|
|
for ($i = 0; $i <= $max; $i++) {
|
2014-08-24 20:42:11 +00:00
|
|
|
...;
|
|
|
|
}
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2014-08-24 20:56:09 +00:00
|
|
|
for $i (0 .. $max) {
|
|
|
|
...;
|
|
|
|
}
|
|
|
|
|
2013-09-18 18:58:59 +00:00
|
|
|
foreach (@array) {
|
2014-08-24 20:42:11 +00:00
|
|
|
print "Este elemento es $_\n";
|
|
|
|
}
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
|
|
|
|
#### Expresiones regulares
|
|
|
|
|
2020-06-10 10:48:01 +00:00
|
|
|
# El soporte de expresiones regulares en Perl es muy amplio y profundo, y
|
2014-08-24 20:42:11 +00:00
|
|
|
# está sujeto a una extensa documentación en perlrequick, perlretut, entre otros.
|
2013-09-18 18:58:59 +00:00
|
|
|
# Sin embargo, resumiendo:
|
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
# Coincidencia simple
|
2013-09-18 18:58:59 +00:00
|
|
|
if (/foo/) { ... } # verdadero si $_ contiene "foo"
|
|
|
|
if ($a =~ /foo/) { ... } # verdadero si $a contiene "foo"
|
|
|
|
|
|
|
|
# Substitución simple
|
2014-08-24 20:42:11 +00:00
|
|
|
$a =~ s/foo/bar/; # remplaza "foo" con "bar" en $a
|
|
|
|
$a =~ s/foo/bar/g; # remplaza TODAS LAS INSTANCIAS de "foo" con "bar" en $a
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
#### Archivos y E/S
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2020-06-10 10:48:01 +00:00
|
|
|
# Puede abrir un archivo para obtener datos o escribirlos utilizando la
|
2014-08-24 20:42:11 +00:00
|
|
|
# función "open()"
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
open(my $entrada, "<" "entrada.txt") or die "No es posible abrir entrada.txt: $!";
|
|
|
|
open(my $salida, ">", "salida.txt") or die "No es posible abrir salida.txt: $!";
|
|
|
|
open(my $log, ">>", "mi.log") or die "No es posible abrir mi.log: $!";
|
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
# Es posible leer desde un gestor de archivo abierto utilizando el operador "<>".
|
|
|
|
# En contexto escalar, leer una sola línea desde el gestor de archivo, y
|
2020-06-10 10:48:01 +00:00
|
|
|
# en contexto de lista, leer el archivo completo en donde asigna
|
2014-08-24 20:42:11 +00:00
|
|
|
# cada línea a un elemento de la lista
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
my $linea = <$entrada>;
|
|
|
|
my @lineas = <$entrada>;
|
|
|
|
|
|
|
|
#### Escribiendo subrutinas
|
|
|
|
|
|
|
|
# Escribir subrutinas es fácil:
|
|
|
|
sub logger {
|
|
|
|
my $mensajelog = shift;
|
|
|
|
open my $archivolog, ">>", "mi.log" or die "No es posible abrir mi.log: $!";
|
|
|
|
print $archivolog $mensajelog;
|
|
|
|
}
|
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
# Ahora podemos utilizar la subrutina al igual que cualquier otra función incorporada:
|
2013-09-18 18:58:59 +00:00
|
|
|
logger("Tenemos una subrutina logger!");
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Utilizando módulos Perl
|
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
Los módulos en Perl proveen de una gama de funciones que le pueden ayudar a evitar reinventar la rueda. Éstas se pueden descargar desde CPAN ( http://www.cpan.org/ ). Algunos de los módulos más populares ya están incluidos con la misma distribución de Perl.
|
2013-09-18 18:58:59 +00:00
|
|
|
|
2014-08-24 20:42:11 +00:00
|
|
|
perlfaq contiene preguntas y respuestas relacionadas con muchas tareas comunes, y algunas veces provee sugerencias sobre buenos módulos de CPAN que puede usar.
|
2013-09-18 18:58:59 +00:00
|
|
|
|
|
|
|
#### Material de Lectura
|
|
|
|
|
|
|
|
- [perl-tutorial](http://perl-tutorial.org/)
|
2014-08-24 20:42:11 +00:00
|
|
|
- [Learn Perl](http://www.perl.org/learn.html)
|
2013-09-18 18:58:59 +00:00
|
|
|
- [perldoc](http://perldoc.perl.org/)
|
2014-08-24 20:42:11 +00:00
|
|
|
- y en su propio perl: `perldoc perlintro`
|