Está en la página 1de 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 Java Uso Aplicacin, de negocios, del lado del cliente, General, del lado del servidor, Web Para sistemas Aplicacin, de negocios, del lado del cliente, General, del lado del servidor, Web Paradigma Genrico, imperativo, orientado a objetos, reflexivo Estandarizado S, estndar de facto a travs de la especificacin del lenguaje Java Porcentaje de uso 17.479%

C C#

Imperativo, de procedimiento Funcional, genrico, imperativo, orientado a objetos, reflexivo

1989, ANSI C89, ISO C90/C99 2000, ECMA, ISO

16.976% 8.781%

Pgina 3 de 37

Eduardo Bayn Cascajo

Seguridad Informtica

C++

Aplicacin, Sistema

Objective-C

PHP

Visual Basic

Python

Perl

Ruby

Genrico, imperativo, orientado a objetos, de procedimiento Aplicacin imperativo, orientado a objetos, reflexivo Del lado del Imperativo, servidor, Web orientado a objetos, de procedimiento, reflexivo Aplicacin, Orientado a Educacin componentes, orientada a eventos, imprescindible Aplicacin, Orientada a General, Web, aspectos, Scripting funcional, imperativo, orientado a objetos, reflexivo Aplicacin, de Funcional, secuencias de genrica, comandos, de imperativo, procesamiento orientado a de texto, Web objetos, de procedimiento, de reflexin. Aplicacin, Orientada a Scripting, Web aspectos, funcional, imperativo, orientado a objetos, reflexivo.

2011, ISO

8.063%

No

6.919%

No

5.710%

No

4.531%

S, estndar de facto a travs de Propuestas de Mejoras de Python (PEP) s.

3.218%

No

2.773%

No

1.441%

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

Operadores de Cadena Existen varias operaciones que se pueden realizar con las cadenas, algunas vienen predeterminadas en Python:
Operador S+T S*N upper(S) Descripcin Concatenacin Repeticin Convierte S en maysculas Ubicacin Predeterminado Predeterminado mdulo string

Operadores lgicos o booleanos


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

not B

Desigualdad

Pgina 7 de 37

Eduardo Bayn Cascajo

Seguridad Informtica

Operadores de listas
Operador L+J L*N L[I] Descripcin Concatenacin Repeticin ndice Locacin Predeterminado Predeterminado 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 [] \w \W \s \S \d \D \b \b \B * + [m,n] ? | () Descripcin Especificacin de rango. (p.e. [a-z] representa una letra en el rango de la a a laz Letra o dgito; es lo mismo que [0-9A-Za-z] Ni letra, ni dgito Espacio, es lo mismo que [ \t\n\r\f] No espacio Dgito; es lo mismo que [0-9] No dgito Backspace (0x08) (slo si aparece en una especificacin de rango) Lmite de palabra (slo si no aparece en una especificacin de rango) No lmite de palabra Cero o ms repeticiones de lo que precede Una o ms repeticiones de lo que precede 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:
$ @ [a-z] _ [A-Z] Variable global Variable instancia Variable local 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