Sie sind auf Seite 1von 37

Python, Ruby y Perl

Seguridad Informtica
Autor: Eduardo Bayn Cascajo
Profesor: Santiago Blanco
11/01/2012
Eduardo Bayn Cascajo Seguridad Informtica

Contenidos
Introduccin ........................................................................................................ 3
Comparacin de los lenguajes de programacin ............................................ 3
Python ................................................................................................................ 5
Por qu Python? ........................................................................................... 5
Ejemplos bsicos con Python ......................................................................... 5
Ejemplo 1: Secuencias simples ................................................................... 6
Ejemplo 2: Operadores ............................................................................... 7
Ejemplo 3: Definicin de variables .............................................................. 8
Ejemplo 4: Estructura condicional if ............................................................ 9
Ejemplo 5: Bucles FOR ............................................................................. 11
Ejemplo 6: Bucles WHILE ......................................................................... 11
Ejemplo 7: Funciones ................................................................................ 12
Ejemplo 7: Estructura de datos tipo array ................................................. 13
Ejercicios bsicos ......................................................................................... 14
Ruby ................................................................................................................. 18
Ejemplos sencillos ........................................................................................ 19
Trabajo con cadenas .................................................................................... 19
Expresiones regulares .................................................................................. 21
Hashes.......................................................................................................... 22
Estructuras de control ................................................................................... 23
Case .......................................................................................................... 23
While ......................................................................................................... 23
Times ........................................................................................................ 24
For ............................................................................................................. 24
Iteradores...................................................................................................... 25
Variables ....................................................................................................... 25
Perl ................................................................................................................... 27
Ejemplo sencillo con Perl .............................................................................. 27
Variables y Datos.......................................................................................... 28
Variables escalares ................................................................................... 28
Variables de matriz: arreglos ..................................................................... 28
Variables matrices asociadas: "hashes".................................................... 29

Pgina 1 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Entrada/Salida .............................................................................................. 30
Estructuras de control ................................................................................... 32
Estructuras condicionales ......................................................................... 32
Estructuras repetitivitas ............................................................................. 34
Bibliografa y Webgrafa ................................................................................... 36

Pgina 2 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Introduccin
En el siguiente documento vamos a ver un resumen sobre algunos los distintos
lenguajes de programacin existentes, sobre todo los ms usados en la
actualidad.

Haremos un poco ms de hincapi en los siguientes lenguajes:

Python
Ruby
Perl

Comparacin de los lenguajes de programacin


Los lenguajes de programacin se utilizan para controlar el comportamiento de
una mquina (a menudo un ordenador). Al igual que los lenguajes naturales,
los lenguajes de programacin se ajustan a las reglas de la sintaxis y la
semntica.

Hay miles de lenguajes de programacin y se crean nuevos cada ao. Idiomas


que pocos se lo suficientemente popular que son utilizados por ms de unas
pocas personas, pero los profesionales programadores pueden utilizar docenas
de idiomas durante su carrera. [1]

Por ejemplo, vamos a ver a continuacin una tabla con la comparacin entre
los distintos lenguajes de programacin que vamos a usar en este trabajo,
adems de algn otro que son de los ms usados segn las referencias que
podemos encontrar en TIOBE:

Lenguaje Uso Paradigma Estandarizado Porcentaje


de uso
Java Aplicacin, de Genrico, S, estndar de 17.479%
negocios, del imperativo, facto a travs de
lado del orientado a la especificacin
cliente, objetos, del lenguaje
General, del reflexivo Java
lado del
servidor, Web
C Para sistemas Imperativo, de 1989, ANSI C89, 16.976%
procedimiento ISO C90/C99
C# Aplicacin, de Funcional, 2000, ECMA, 8.781%
negocios, del genrico, ISO
lado del imperativo,
cliente, orientado a
General, del objetos,
lado del reflexivo
servidor, Web

Pgina 3 de 37
Eduardo Bayn Cascajo Seguridad Informtica

C++ Aplicacin, Genrico, 2011, ISO 8.063%


Sistema imperativo,
orientado a
objetos, de
procedimiento
Objective-C Aplicacin imperativo, No 6.919%
orientado a
objetos,
reflexivo
PHP Del lado del Imperativo, No 5.710%
servidor, Web orientado a
objetos, de
procedimiento,
reflexivo
Visual Aplicacin, Orientado a No 4.531%
Basic Educacin componentes,
orientada a
eventos,
imprescindible
Python Aplicacin, Orientada a S, estndar de 3.218%
General, Web, aspectos, facto a travs de
Scripting funcional, Propuestas de
imperativo, Mejoras de
orientado a Python (PEP) s.
objetos,
reflexivo
Perl Aplicacin, de Funcional, No 2.773%
secuencias de genrica,
comandos, de imperativo,
procesamiento orientado a
de texto, Web objetos, de
procedimiento,
de reflexin.
Ruby Aplicacin, Orientada a No 1.441%
Scripting, Web aspectos,
funcional,
imperativo,
orientado a
objetos,
reflexivo.

Pgina 4 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Python
Python es un lenguaje de programacin de alto nivel cuya filosofa hace
hincapi en una sintaxis muy limpia y que favorezca un cdigo legible.

Se trata de un lenguaje de programacin multiparadigma ya que soporta:

Orientacin a objetos.
Programacin imperativa.
Programacin funcional(en menor medida)

Es un lenguaje interpretado, de tipo dinmico y multiplataforma.

Es administrado por la Python Software Foundation. Posee una licencia de


cdigo abierto, denominada Python Software Foundation License, que es
compatible con la Licencia pblica general de GNU a partir de la versin 2.1.1,
e incompatible en ciertas versiones anteriores. [2]

Por qu Python?
Python es un buen lenguaje para aprender a programar. Su sintaxis es sencilla
y tiene incorporadas caractersticas muy poderosas. Permite diversos estilos de
programacin, incluyendo tanto tcnicas convencionales como las ms
modernas orientadas a objetos. Corre en diversas plataformas como
Unix/Linux, MS Windows, Macintosh, etc.

Sin embargo, Python no es solamente un lenguaje de principiantes. Con una


mayor experiencia, se puede seguir usando Python como un fin en s mismo o
como un lenguaje rpido de prototipos. Para algunas cosas Python no est
bien preparado, pero estas son realmente pocas y muy avanzadas. [3]

Ejemplos bsicos con Python


Vamos a realizar a continuacin algunos ejercicios con este lenguaje de
programacin, para ello instalaremos el compilador de Python en nuestro
equipo si no lo tenemos. Nos dirigiremos al sitio web oficial de descargas:
http://www.python.org/download/ y elegimos la versin que deseemos, en mi
caso para Windows .

Una vez descargado e instalado lo abrimos y podremos empezar a probar


nuestro cdigo Python.

Por ejemplo, el tpico Hola mundo!:

Pgina 5 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Ejemplo 1: Secuencias simples


Vamos a ver comandos simples y el uso de Python como una calculadora, el
uso de parntesis para obtener resultados correctos y el uso de cadenas de
formato para combinar texto y nmeros. Adems veremos cmo cerrar Python
desde dentro de un programa.

Ya hemos visto como primer ejemplo como mostrar una cadena de texto, ahora
vamos a ver como realizar una operacin matemtica sencilla (suma, resta,)
como si de una calculadora se tratara:

O algo un poco mas complicado, combinando expresiones mltiples:

Python toma a todos los nmeros como enteros, y da por sentado que as lo
desea el usuario. Si necesitas usar decimales, simplemente agrega un nmero
despus del punto decimal:

El operador % se conoce en otros lenguajes como el operador mdulo (resto) y


generalmente se codifica como MOD u otro nombre similar:

Python tambin muestra cadenas con formato, y es tan fcil como:

Hay otras letras que pueden incluirse despus del marcador %. Algunas de las
ms usadas son:

%s - para una cadena


%x - para un nmero hexadecimal
%0.2f - para un nmero real de hasta dos decimales
%04d - completa el nmero con ceros hasta llegar a los cuatro dgitos

Se puede imprimir cualquier objeto de Python con el comando print. A veces el


resultado no ser el que uno espera (tal vez slo una descripcin de qu tipo
de objeto es) pero al menos siempre podr ser impreso.

Podemos salir de Python con exit():


Pgina 6 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Ejemplo 2: Operadores
Qu tipo de operadores hay, qu podemos hacer con los datos,
especficamente el rango de operaciones aritmticas y de cadena, y los
operadores lgicos y de listas.

Operadores aritmticos
Ya hemos visto la mayora en el anterior tema, pero no viene mal hacer
un breve repaso con la siguiente tabla:

Operador Descripcin Efecto


M+N Suma (Matemtico)
M-N Resta (Matemtico)
M*N Multiplicacin (Matemtico)
M/N Divisin (Matemtico)
M**N M elevado a la N (Matemtico)
Mover M, N lugares a la
M>>N (Binario)
derecha
Mover M, N lugares a la
MN (Bitwise)
izquierda
~M Complemento de M (Binario)
M&N AND binario de M,N (Binario)
M|N OR binario de M,N (Binario)

Operadores de Cadena
Existen varias operaciones que se pueden realizar con las cadenas,
algunas vienen predeterminadas en Python:

Operador Descripcin Ubicacin


S+T Concatenacin Predeterminado
S*N Repeticin Predeterminado
Convierte S en
upper(S) mdulo string
maysculas

Operadores lgicos o booleanos

Operador Descripcin Resultado


"true" si A y B
A and B AND
son ambos verdaderos
"true" si ambos o al
A or B OR menos uno de A y B
son verdaderos
"true" si A y B son
A == B Igualdad
iguales
"true" si A y B NO son
A <> B Desigualdad
iguales
"true" si B no es
verdadero (siendo B un
not B Desigualdad
valor o una expresin
booleana)

Pgina 7 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Operadores de listas

Operador Descripcin Locacin


L+J Concatenacin Predeterminado
L*N Repeticin Predeterminado
L[I] ndice Predeterminado

Existen muchos operadores en cada uno de los lenguajes de programacin, y


parte del aprendizaje de un nuevo lenguaje implica familiarizarse con los tipos
de datos que este maneja y con los operadores disponibles para cada uno de
estos tipos.
Un mismo operador (p.ej. la suma) puede estar disponible para tipos diferentes,
pero los resultados pueden no ser idnticos o incluso no estar relacionados.

Ejemplo 3: Definicin de variables


Una variable almacena un valor de cierto tipo. En Python podemos definir
variables de tipo:

Numrica (entera)
Numrica (flotante)
Numrica (complejo)
Cadena de caracteres
Booleano

Para definir una variable en Python solo debemos asignarle el valor, en dicho
momento se define el tipo de variable segn el valor asignado (Python es un
lenguaje sensible a maysculas y minsculas, por lo que debemos respetar
esta caracterstica):

Variable entera: edad=55

Variable flotante: altura=1.80

Variable compleja: valor=5+2i

Cadena de caracteres (puede estar encerrada entre simples o dobles


comillas): nombre="Juan" o Juan

Booleano: encontrado=True o False

Pgina 8 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Por ejemplo, vamos a definir una variable de cada tipo y luego las
imprimiremos empleando la ya conocida funcin print:

Y las visualizamos:

Ejemplo 4: Estructura condicional if


Igual que otros lenguajes cuando tenemos que tomar una decisin en nuestro
programa debemos utilizar la estructura if...else.
Algo muy importante en el lenguaje Python que no lo tienen otros lenguajes es
que la indentacin (niveles) es obligatoria e indica las instrucciones contenidas
en un if.

Vamos a ver un ejemplo para entenderlo mejor. Tenemos el siguiente cdigo


que tiene dos variables, nombre y edad y le sigue una estructura if que evala
el valor de edad y dependiendo de dicho valor mostrar un mensaje u otro:

Del mismo modo podemos escribir las sentencias en la misma lnea:

Pgina 9 de 37
Eduardo Bayn Cascajo Seguridad Informtica

A continuacin vamos a generar un nmero aleatorio comprendido entre 1 y 20.


Luego mostraremos si el valor generado tiene uno o dos dgitos.
Para generar un valor aleatorio hay una librera que debemos importar, del
modo import <nombre_librera>:

Decir que con Python se pueden, al igual que con otros lenguajes de
programacin, anidar estrucutras. Por ejemplo, vamos a generar un valor
aleatorio entre 1 y 1000 y luego imprimiremos un mensaje indicando cuantos
dgitos tiene:

Pgina 10 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Ejemplo 5: Bucles FOR


Vamos a ver un sencillo ejemplo con el uso del bucle for en Python y se
entender bastante bien. Lo que haremos ser utilizar la funcin range() que
genera los valores entre los dos nmeros que le pasemos, sin incluir el
segundo. Con esta funcin, junto con el uso de for mostraremos la tabla del
nmero 9:

Ejemplo 6: Bucles WHILE


La estructura while repite el bloque de instrucciones mientras la condicin se
verifique verdadera.
Si queremos mostrar los nmeros del 1 al 10 con estructuras secuenciales el
proceso es largo y engorroso, utilizando una estructura repetitiva el algoritmo
es muy compacto:

Pgina 11 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Ejemplo 7: Funciones
La estructura fundamental de programacin de los lenguajes estructurados son
las funciones. Una funcin es un conjunto de instrucciones que se la invoca
mediante un nombre y que luego de ejecutado el algoritmo puede retornar un
valor.
Un programa estructurado no es ms que un conjunto de funciones que en
conjunto resuelven un problema complejo.
Veamos la sintaxis en Python para definir y llamar a una funcin:

Decir que una funcin puede tener parmetros de entrada, como una funcin
que queremos que reciba dos enteros y luego nos imprima el mayor, pongamos
un ejemplo para entenderlo:

Pgina 12 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Ejemplo 7: Estructura de datos tipo array


Para recorrer un array es muy comn utilizar la estructura repetitiva for.
Veamos con un ejemplo la sintaxis de esta estructura repetitiva:

O podemos mostrarlo segn su posicin, siempre empezando por que el primer


valor es 0:

Si lo deseamos podemos mostrar tambin un conjunto acotado de valores, por


ejemplo en el siguiente array solo mostraremos los valores de las posiciones 2
a la 5 del array (no se incluye la ltima posicin y recordamos que se empieza
a contar desde 0 cada posicin):

Del mismo modo podemos dejar sin especificar el segundo valor y decir desde
que posicin hasta el final queremos que se muestre:

Pgina 13 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Ejercicios bsicos
Una vez visto un poco la introduccin a Python y unos cuantos ejemplos de su
uso, vamos a realizar algunos ejercicios bsicos para comprender un poco ms
su funcionamiento.

1. Escriba un programa que muestre la siguiente figura:


\ | /
@ @
*
\"""/

2. Hacer un programa que le pida una cadena al usuario (usando la funcin


"raw_input") y la imprima a pantalla al revs.

3. Hacer un programa que le pida un nmero al usuario (usando la funcin


"raw_input") y muestre ese nmero menos dos, ms dos, multiplicado
por dos, dividido por dos de forma entera, dividido por dos de forma
decimal, y elevado a la potencia de dos.

Pgina 14 de 37
Eduardo Bayn Cascajo Seguridad Informtica

4. Pedirle un nmero al usuario, elevarlo al cuadrado, y mostrar los dgitos


al revs y separados por un espacio.

5. Hacer un programa que le pida una cadena al usuario, y arme un


tringulo creciente y decreciente con ese texto.

6. Escribir un programa que le pregunte un nmero al usuario. Si el nmero


es 5, que muestre "Suerte!"; si el nmero es mayor a 10, que muestre
"Grande!"; Para los otros casos que muestre "Sin suerte, :("

Lo guardamos con extensin .py y lo podemos ejecutar desde una


consola de comandos:

Pgina 15 de 37
Eduardo Bayn Cascajo Seguridad Informtica

7. Pedirle un texto al usuario, y hacer una estadstica sobre cuntas veces


aparece cada carcter, mostrando el resultado de mayor a menor
respetando la alineacin a la derecha de los nmeros.

Y lo ejecutamos:

Pgina 16 de 37
Eduardo Bayn Cascajo Seguridad Informtica

8. Hacer una funcin que recibe un nmero y contesta "par" o "impar" en


funcin de si el nmero es par o no.

9. Hacer una funcin que reciba dos palabras y que imprima lnea por lnea
las primeras, segundas, etc. letras de ambas palabras.

10. Pedirle un texto al usuario y mostrar el mismo texto pero sin las vocales.

Pgina 17 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Ruby
Ruby es un lenguaje de programacin interpretado, reflexivo y orientado a
objetos, creado por el programador japons Yukihiro "Matz" Matsumoto, quien
comenz a trabajar en Ruby en 1993, y lo present pblicamente en 1995.
Combina una sintaxis inspirada en Python y Perl con caractersticas de
programacin orientada a objetos similares a Smalltalk. Comparte tambin
funcionalidad con otros lenguajes de programacin como Lisp, Lua, Dylan y
CLU. Ruby es un lenguaje de programacin interpretado en una sola pasada y
su implementacin oficial es distribuida bajo una licencia de software libre. [4]

Este lenguaje de programacin puede venir integrado en los sistemas Linux


actual, de todos modos lo primero que debemos hacer es comprobar si
tenemos instalado Ruby en nuestro sistema. Para ello, abriremos un terminal
en nuestro Linux y teclearemos:

Podemos observar que yo no lo tengo instalado, por lo que procederemos a


instalarlo de la siguiente manera:

Una vez terminada la instalacin, podemos empezar a usar Ruby e introducir


directamente en la lnea de comandos un programa Ruby utilizando la opcin

-e:

Del mismo modo, tambin podemos guardar un programa que creemos en


Ruby en un fichero externo, o crear nuestro cdigo y ponerle extensin .rb:

Entonces ahora solo tendremos que llamarlo desde nuestra lnea de comandos
para que se ejecute el cdigo:

Otra opcin que tenemos para usar Ruby es escribir el comando irb para
acceder a su shell y desde all ejecutar nuestro cdigo:

Pgina 18 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Ejemplos sencillos
Veamos una funcin que calcula el factorial de un nmero:

En este cdigo se puede apreciar la aparicin repetida de end, necesario ya


que debemos indicar el primero para cerrar la condicin if y el segundo para
terminar de definir la funcin fact que hemos creado para este ejemplo.
Podemos ver que no aparece la sentencia return y es que en Ruby es
innecesaria y devolver lo ltimo que haya evaluado. Por ltimo ARGV es un
array que contiene los parmetros de la lnea de comandos y to_i convierte
una cadena de caracteres a un entero:

Debemos saber que Ruby es capaz de tratar cualquier entero que quepa en la
memoria del ordenador.

Trabajo con cadenas


Ruby maneja tanto cadenas como datos numricos. Las cadenas pueden estar
entre comillas dobles ("...") o comillas simples ('...'):

Podemos ver que las comillas simples y dobles a veces tienen efectos
diferentes.
Una cadena de comillas dobles permite la presencia embebida de caracteres
de escape precedidos por un backslash(barra invertida) y la expresin de
evaluacin #{ }:

Pgina 19 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Una cadena de comillas simples no realiza esta evaluacin, lo que se ve es lo


que se obtiene:

El manejo de las cadenas en Ruby es ms inteligente e intuitivo que en C. Por


ejemplo, se pueden concatenar cadenas con + y se puede repetir una cadena
varias veces con *:

Tambin podemos crear arrays del siguiente modo:

Vemos como el ndice de los arrays empieza en 0 y que si queremos visualizar


varios elementos consecutivos podemos hacerlo especificando la posicin de
dichos elementos con una coma entre los corchetes de seleccin.

Los arrays se pueden convertir a y obtener de cadenas


utilizado join y split respectivamente especificndoles el carcter con el que
deseamos separarlos o unir dependiendo del caso que estemos usando:

Pgina 20 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Expresiones regulares
Con las expresiones regulares comprobaremos si una cadena satisface a una
descripcin o un patrn. Para estos patrones existen algunos caracteres y
combinaciones de caracteres que tiene un significado especial:

Smbolo Descripcin
[] Especificacin de rango. (p.e. [a-z] representa una letra
en el rango de la a a laz
\w Letra o dgito; es lo mismo que [0-9A-Za-z]
\W Ni letra, ni dgito
\s Espacio, es lo mismo que [ \t\n\r\f]
\S No espacio
\d Dgito; es lo mismo que [0-9]
\D No dgito
\b Backspace (0x08) (slo si aparece en una
especificacin de rango)
\b Lmite de palabra (slo si no aparece en una
especificacin de rango)
\B No lmite de palabra
* Cero o ms repeticiones de lo que precede
+ Una o ms repeticiones de lo que precede
[m,n] Al menos m y como mximo n de lo que precede
? Al menos una repeticin de lo que precede; es lo mismo
que [0,1]
| Puede coincidir con lo que precede o con lo que sigue
() Agrupamiento

En Ruby, como en Perl como veremos, normalmente estn rodeadas por


barras inclinadas en vez de por comillas dobles.

Por ejemplo, supongamos que queremos comprobar si una cadena se ajusta a


esta descripcin: "Comienza con una f minscula, a la que sigue exactamente
una letra mayscula y opcionalmente cualquier cosa detrs de sta, siempre y
cuando no haya ms letras minsculas." En Ruby se hara de la siguiente
manera /^f[A-Z][^a-z]*$/ ya que solamente es necesario solicitar que se
verifique la cadena contra la siguiente expresin regular:

Pgina 21 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Hashes
Un array asociativo contiene elementos que se pueden acceder, no a travs de
ndices numricos secuenciales, si no a travs de claves que pueden tener
cualquier tipo de valor.

Estos arrays se conocen a veces como hash o diccionario; en el mundo Ruby


se prefiere el trmino hash. Los hash se pueden crear mediante pares de
elementos dentro de llaves ({ }). Se usa la clave para encontrar algo en un hash
de la misma forma que se utiliza el ndice para encontrar algo en un array:

Si especificamos un valor que no existe, as nos lo indicar:

Pero podemos aadirlo:

Y visualizarlo entero, escribiendo su valor:

Tambin podemos borrar un valor:

Pgina 22 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Estructuras de control
Ya las conocemos de otros lenguajes de programacin, pero vamos a ver como
es su sintaxis que puede que cambie un poco:

Case
Se utiliza la sentencia case para comprobar una secuencia de condiciones. Se
parece al switch de C pero es considerablemente ms potente.

1..10 y 11..20 son expresiones que representan un rango entre 1 y 10 y 11 y


20 inclusive respectivamente.

La sentencia case utiliza internamente el operador === para verificar las


distintas condiciones. Dentro de la naturaleza orientada a objetos de Ruby, ===
lo interpreta el objeto que aparece en la condicin when.

While
Se pueden hacer bucles con la instruccin while, que no es ms que un
if repetido:

Pgina 23 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Times
Este es un ejemplo de cmo en Ruby es todo un objeto, inclusive los nmeros.
El mtodo times necesita dos cosas:

1. un nmero entero, del cul es el mtodo


2. un bloque

Lo que hace times es iterar el bloque ese "nmero" de veces:

Podemos fijarnos que la variable n va de 0 a 9 y que por lo tanto se bloque se


repite 10 veces.

For
El siguiente bucle For se ejecuta una vez por cada elemento de la coleccin,
esta coleccin puede ser un rango de valores:

Pgina 24 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Iteradores
Los iteradores no son un concepto original de Ruby. Son comunes en otros
lenguajes orientados a objetos. Tambin se utilizan en Lisp aunque no se les
conoce como iteradores. Sin embargo este concepto de iterador es muy poco
familiar para muchas personas por lo que se explorar con detalle.

Un iterador no es ms que algo que hace la misma cosa muchas veces.

El tipo strings de Ruby tiene algunos iteradores tiles:

each_byte es un iterador sobre los caracteres de una cadena. Cada carcter


se sustituye en la variable local c.

each_line es otro iterador de String:

Se puede utilizar la sentencia de control retry junto con un bucle de iteracin y


se repetir la iteracin en curso desde el principio.

Variables
Este ser el ltimo apartado que veamos sobre Ruby, aunque se podra
profundizar mucho ms.

Ruby tiene tres clases de variables, una clase de constante y exactamente dos
pseudo-variables. Las variables y las constantes no tienen tipo. Aunque las
variables sin tipo tienen sus inconveniente y presentan ms ventajas.

En la mayora de los lenguajes hay que declarar las variables para especificar
su tipo, si se pueden modificar e indicar su mbito, ya que no es ningn
problema el tipo y cmo vamos a ver, el resto se obtiene a partir del nombre, en
Ruby no se necesita declarar las variables.

El primer carcter de un identificador lo cataloga de un plumazo:

Clases de variables:
$ Variable global
@ Variable instancia
[a-z] _ Variable local
[A-Z] Constante

Pgina 25 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Las nicas excepciones a lo expuesto en la tabla son las pseudo-variables de


Ruby:

self, que referencia al objeto que est en ese momento en ejecucin.


nil que es el valor nulo que toman las variables no inicializadas.

Ambos tienen un identificador como de variable local pero self es una variable
global que la mantiene el interprete y nil es una constante. Como estas son las
nicas excepciones no provocan mucha confusin.

No se debe asignar valores a self y nil principalmente porque un valor


de self referencia al objeto de nivel superior:

Pgina 26 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Perl
Perl es un lenguaje de programacin diseado por Larry Wall en 1987. Perl
toma caractersticas del lenguaje C, del lenguaje interpretado bourne shell (sh),
AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de
programacin.

Estructuralmente, Perl est basado en un estilo de bloques como los del C o


AWK, y fue ampliamente adoptado por su destreza en el procesador de texto y
no tener ninguna de las limitaciones de los otros lenguajes de script. [5]

Con Perl podemos programar casi de todo (hay libreras/mdulos para casi
cualquier cosa que queramos), pero hay aplicaciones que requieren mucha
rapidez en las cuales es mejor utilizar otros lenguajes que no sean
interpretados. Perl es un lenguaje que permite programar de forma muy rpida
y es excelente para el tratamiento de cadenas.

En sus comienzos fue un lenguaje restringido a sistemas UNIX, pero hoy en da


existen versiones del intrprete de Perl para casi todos los sistemas.

Para trabajar con Perl slo nos hace falta:

Un editor para poder escribir los programas Perl, por ejemplo, el


notepad en Windows y el gedit en Linux
El intrprete de Perl, que ejecute nuestros programas realizados con
Perl. [6]

Ejemplo sencillo con Perl


Para crear nuestro primer programa abriremos un documento nuevo y
escribiremos lo siguiente:

Debemos especificar el bash que se ejecutar, en nuestro caso como


usaremos Linux es el /bin/perl como se ve en la primera lnea.

Y ejecutamos nuestro cdigo, con la instruccin ./ seguido del nombre del


archivo que debe de tener extensin .pl:

Pgina 27 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Variables y Datos
En PERL no hay que declarar los tipos de las variables.
Van precedidas por unos caracteres especiales como: $,@,%, que ya
indican su tipo.
Se distingue entre minscula y maysculas, por tanto, $A y $a son
distintas

Variables escalares
Comienzan con el signo $ y contienen datos de tipo escalar. Por escalar
entendemos valores numricos y/o alfanumricos.
Para la asignacin se usa el signo igual (=) como en la mayora de los
lenguajes. En el caso de ser un valor alfanumrico (texto) este se escribe
entres comillas. Al final de la asignacin se debe escribir ";".

Veamos un pequeo ejemplo:


$animal1="Gato";
$animal2="Perro";

Tambin podemos interpolar variables una dentro de otra:


$animal="Gato $color de $edad aos";

Variables de matriz: arreglos


Comienzan con el signo @ y contienen una lista de valores escalares
(nmeros y/o textos). Al ser una lista de valores para acceder a cada de uno
estos se utiliza un nmero que indica su posicin dentro de la lista. La
numeracin empieza en 0, y se coloca entre corchetes [ ]. A este nmero que
indica la posicin de un valor dentro de la lista del arreglo se denomina ndice:

@animal=("gato","perro","vaca");

$animal[0] sera "gato"

$animal[1] sera "perro" y as hasta el ltimo valor.

Tambin podemos hacer referencia a varios valores as:

$animal[1..2] equivale a los valores de $animal[1] y $animal[2]

$animal[1,2] equivale a los valores de $animal[1] y $animal[2]

Pgina 28 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Adems podemos realizar las siguientes acciones:

Colocar nuevos elementos al final de la lista:


push(@animal,"toro","oveja");
push(@animal,@pajaro);

Sacar el ltimo elemento de la lista (se asigna a una variable escalar):


$sacado=pop(@animal);

Reemplazar el primer elemento del arreglo:


unshift(@animal,"caballo");

Sacar el primer elemento del arreglo (se asigna a una variable escalar):
$sacado=shift(@animal);

Variables matrices asociadas: "hashes"


Comienzan con el signo % y se tratan de matrices que se referencian por el
par clave/valor. Como veremos a continuacin los valores se introducen
manteniendo una relacin a pares. El primer valor es la clave o referencia del
siguiente.

Se pueden asociar los valores a las matrices asociadas de 2 modos:

%dia=(Lun,"Lunes",Mar,"Martes",Mie,"Mircoles",Jue,"Jueves",Vie,"Viernes",Sa
b,"Sbado",Dom,"Domingo");

%dia=(
Lun=> "Lunes",
Mar=> "Martes",
Mie=> "Mircoles",
Jue=> "Jueves",
Vie=> "Viernes",
Sab=> "Sbado",
Dom=> "Domingo"
);

La referencia a los valores se realiza mediante la variable escalar del la matriz


asociada y sus claves:

$dia{Lun} equivale a "Lunes", $dia{Sab} equivale "Sbado".

Pgina 29 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Al igual que con los arreglos, las matrices asociadas tambin tienen una serie
de funciones asociadas, que facilitan su utilizacin:

delete($matriz{clave}) Lo usamos para borrar un par clave/valor de un


hash. Utilizamos la funcin delete que usa como argumento la variable
escalar y la clave del para a borrar:
delete($lista{tres});

values(hash) Muestra todos los valores de la matriz asociada


%lista(uno,"1",dos,"2",tres,"3");

keys(hash) Muestra las claves de la matriz asociada:


%lista(uno,"1",dos,"2",tres,"3");
print keys(%lista);
Muestra todos las claves del "hash", sin mantener un orden
determinado.

each(hash) Muestra un par clave/valor:


%lista(uno,"1",dos,"2",tres,"3");
print each(%lista);
Muestra slo un par clave/valor de la matriz asociada.

Entrada/Salida
Hasta ahora se han visto los tipos de variables, a continuacin vamos a ver el
modo de capturar esos valores a travs de teclado/pantalla.

La instruccin bsica, como en muchos lenguajes de programacin, para


mostrar el valor de las variables en pantalla es print como ya hemos visto en el
primer ejemplo tras la explicacin de Perl.

Existen muchos modificadores para la salida de los valores de las variables,


que la mayora son comunes en los lenguajes de programacin:

"\n" Nueva lnea.


"\t" Tabulacin.
"\r" Retorno de carro.
"\f" Nueva hoja (formfeed).
"\b" Espacio atrs (backspace).
"\e" Secuencia de ESCape.
"\u" Pasa a mayscula el primer caracter de texto siguiente".
"\U" Pasa a mayscula todo el texto siguiente".
"\l" Pasa a minscula el primer caracter de texto siguiente".
"\L" Pasa a minscula todo el texto siguiente.

Pgina 30 de 37
Eduardo Bayn Cascajo Seguridad Informtica

"\E" Fin del efecto de los modificadores \U,\L.


"\a" Emite un pitido.
"\cC" Combinacin de Control+Letra. En este caso Control-C .
xN el signo por (x) seguido de un nmero N repite un caracter o texto anterior N
veces.

Podemos ver algunos ejemplos del uso de estos modificadores:

(Utilizo \n tras cada print para no confundir cada una


de las instrucciones)

Y las visualizamos:

Tambin podemos usar operadores aritmticos, pero solo afectan a los valores
numricos:

Pgina 31 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Lo particular del lenguaje Perl es el mtodo que se usa para la entrada de


datos desde teclado. Para asignar un valor desde el teclado a una variable, se
asigna a la variable la representacin del teclado <STDIN> (Ej $var=<STDIN>):

Existe la funcin chop() que est asociada a la entrada de datos y elimina el


ltimo carcter de la entrada que hayamos hecho en una nueva lnea.

Estructuras de control
La mayora de las estructuras de control que hay en Perl han sido heredadas
de C/C++ por lo que ser fcil adaptarnos a ellas.

La estructura de control ms simple que permite bifurcar los datos es el IF que


nos permite realizar una accin o un grupo de acciones en funcin de la
condicin especificada.

Estructuras condicionales
Esta estructura de control, como en el resto de lenguajes de programacin,
evala segn las condiciones que establezcamos dentro de los bloques
IFELSIFELSE.

Estas dos ltimas partculas solo son necesarias si vamos a evaluar ms de


una condicin.

Pgina 32 de 37
Eduardo Bayn Cascajo Seguridad Informtica

En Perl existen dos tipos de variantes del IF dependiendo de las expresiones


que usen las condiciones de comparacin:

1. Comparacin numrica:
== igual que...
!= distinto de...
< menor que...
> mayor que...
>= mayor o igual que...
<= menor o igual que...

2. Comparacin alfanumrica, literal o de textos.


- eq igual que...
- ne distinto de...
- lt menor que...
- gt mayor que...
- ge mayor o igual que...
- le menor o igual que...

Dentro de Perl existe otra estructura condicional que unless que se usa
cuando queremos que se ejecute una instruccin en el caso de que una
variable no est definida o que la condicin no sea verdad (equivaldra a
sino existe).

Pgina 33 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Estructuras repetitivitas
Dentro de las estructuras de control estn las estructuras repetitivas. Estas nos
permiten repetir una accin o grupos de acciones dependiendo de una
condicin. Podemos usar:
For
Foreach
While
Todas estas instrucciones producen los ya conocidos bucles.

FOR
Se basa en la repeticin N veces, definidas por el programador, de una serie de
acciones o instrucciones. Cuando la condicin alcanza el mximo de veces
definido, concluye esta repeticin.
Por ejemplo mostramos una lista de nmeros del 1 al 9 contando de 2 en dos:

En ocasiones nos puede interesar que el bucle termine antes del nmero de
veces de repeticin estimado o que al alcanzar cierto nmero de repeticiones
se produzca una alteracin del bucle. Para permitir estas alteraciones del flujo
normal de las repeticiones, tenemos las instrucciones next (salta la cuenta a un
punto determinado del proceso del bucle) y last (concluye la cuenta y las
repeticiones, terminando el bucle).

FOREACH
Usamos esta instruccin para recorrer los valores de las matrices o arrays. La
expresin que va dentro de los parntesis es evaluada para producir una lista
con sus valores, que actan como contadores del bucle, ejecutndose el bucle
una vez para cada uno de los elementos.

Por ejemplo, crearemos el array @edades y usaremos el bucle foreach para


mostrar cada una de las entradas de nuestro arrray:

Pgina 34 de 37
Eduardo Bayn Cascajo Seguridad Informtica

WHILE
Es un bucle que se repetir mientras que se cumpla o deje de cumplirse la
condicin que le demos.

Por ejemplo, un bucle que nos mostrar un saludo mientras el contador sea
menor que 3 y que cuando sea 2, antes de salir, se despida:

Debemos tambin saber la existencia de dountil, por ejemplo este programa


mostrar el mensaje Hola, hasta que el contador no llegue a 5 veces:

Pgina 35 de 37
Eduardo Bayn Cascajo Seguridad Informtica

Bibliografa y Webgrafa
[1]Comparison of programming languages
http://en.wikipedia.org/wiki/Comparison_of_programming_languages
[Consulta el 9 de enero de 2012]

[2]Python http://es.wikipedia.org/wiki/Python
[Consulta el 9 de enero de 2012]

[3]Aprendiendo a programar
http://www.freenetpages.co.uk/hp/alan.gauld/spanish/
[Consulta el 10 de enero de 2012]

[4]Ruby
http://es.wikipedia.org/wiki/Ruby
[Consulta el 10 de enero de 2012]

[5]Perl
http://es.wikipedia.org/wiki/Perl
[Consulta el 10 de enero de 2012]

[6]Tutorial de Introduccin a Perl


http://flanagan.ugr.es/perl/index2.htm
[Consulta el 10 de enero de 2012]

Pgina 36 de 37

Das könnte Ihnen auch gefallen