summaryrefslogtreecommitdiffhomepage
path: root/es-es/perl-es.html.markdown
blob: 644182ffb8bd4c992da5d6ba1b13a8c9250cc9df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
---
name: perl
category: language
language: perl
filename: learnperl-es.pl
contributors:
    - ["Korjavin Ivan", "http://github.com/korjavin"]
translators:
    - ["Francisco Gomez", "http://github.com/frncscgmz"]
    - ["Joaquín Ferrero", "http://github.com/joaquinferrero"]
lang: es-es
---

Perl 5 es un lenguaje de programación altamente capaz, rico en características, con más de 25 años de desarrollo.

Perl 5 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.

```perl
# Comentarios de una sola línea con un carácter hash

#### Tipos de variables en Perl

# 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

### Perl tiene tres tipos principales de variables: escalares, arreglos y hashes

## Escalares
# Un escalar representa un solo valor:
my $animal    = "camello";
my $respuesta = 42;

# Los valores escalares pueden ser cadenas de caracteres, números enteros o 
# de punto flotante; Perl automáticamente los convertirá como sea requerido

## Arreglos
# Un arreglo representa una lista de valores:
my @animales = ("camello","llama","buho"};
my @numeros  = (23, 42, 69);
my @mixto    = ("camello", 42, 1.23);

## Hashes
# Un hash representa un conjunto de pares llave/valor:
my %color_fruta = ("manzana","rojo","banana","amarillo");

# Puede usar un espacio en blanco y el operador "=>" para asignarlos más fácilmente
my %color_fruta = (
   manzana => "rojo",
   banana  => "amarillo",
);

# Los escalares, arreglos y hashes están más documentados en perldata (perldoc perldata)

# Los tipos de datos más complejos se pueden construir utilizando 
# referencias, las cuales le permiten construir listas y hashes dentro
# de listas y hashes

#### Estructuras condicionales y de ciclos

# Perl tiene la mayoría de las estructuras condicionales y de ciclos más comunes
if ( $var ) {
    ...;
} elsif ( $var eq 'bar' ) { 
    ...;
} else {
    ...;
}

unless ( condicion ) {
    ...;
}

# Esto se ofrece como una versión más fácil de leer que "if (!condición)"

# La postcondición al modo Perl:
print "Yow!" if $zippy;
print "No tenemos bananas" unless $bananas;

# while
while ( condicion ) {
    ...;
}

# for y foreach
for ($i = 0; $i <= $max; $i++) {
    ...;
}

for $i (0 .. $max) {
    ...;
}

foreach (@array) {
    print "Este elemento es $_\n";
}


#### Expresiones regulares

# El soporte de expresiones regulares en Perl es muy amplio y profundo, y 
# está sujeto a una extensa documentación en perlrequick, perlretut, entre otros.
# Sin embargo, resumiendo:

# Coincidencia simple
if (/foo/)       { ... }  # verdadero si $_ contiene "foo"
if ($a =~ /foo/) { ... }  # verdadero si $a contiene "foo"

# Substitución simple
$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


#### Archivos y E/S

# Puede abrir un archivo para obtener datos o escribirlos utilizando la 
# función "open()"

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: $!";

# 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
# en contexto de lista, leer el archivo completo en donde asigna 
# cada línea a un elemento de la lista

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;
}

# Ahora podemos utilizar la subrutina al igual que cualquier otra función incorporada:
logger("Tenemos una subrutina logger!");

```

#### Utilizando módulos Perl

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.

perlfaq contiene preguntas y respuestas relacionadas con muchas tareas comunes, y algunas veces provee sugerencias sobre buenos módulos de CPAN que puede usar.

#### Material de Lectura

     - [perl-tutorial](http://perl-tutorial.org/)
     - [Learn Perl](http://www.perl.org/learn.html)
     - [perldoc](http://perldoc.perl.org/)
     - y en su propio perl: `perldoc perlintro`