Perl Para Geocientificos

Perl Para Geocientificos

by Dorian Oria San Martin

Paperback

$25.00
View All Available Formats & Editions
Choose Expedited Shipping at checkout for guaranteed delivery by Thursday, March 28

Product Details

ISBN-13: 9781490709345
Publisher: Trafford Publishing
Publication date: 07/22/2013
Pages: 306
Product dimensions: 7.50(w) x 9.25(h) x 0.64(d)

Read an Excerpt

Perl para Geocientíficos


By Dorian Oria San Martín

Trafford Publishing

Copyright © 2013 Dorian Oria San Martín
All rights reserved.
ISBN: 978-1-4907-0934-5



CHAPTER 1

1.1 Breve historia de Perl

Perl, acrónimo para Practical Extraction and Report Language, es un lenguaje de programación interpretado, diseñado por Larry Wall, quien liberó la primera versión en 1987 a través del grupo de noticias (newsgroup) comp.sources.misc.

Perl toma características del lenguaje C, del lenguaje interpretado bourne shell (sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación (http://es.wikipedia.org/wiki/Perl) Estructuralmente, Perl está basado en un estilo de bloques como los del C o AWK y fue ampliamente adoptado por su destreza en el procesado de texto y no tener ninguna de las limitaciones de los otros lenguajes de script.

La última versión de Perl fue liberada en 1994. En esta versión el intérprete fue reescrito completamente y se introdujeron mejora tales como referencias, módulos, objetos y paquetes. Desde entonces, versiones menores de Perl han aparecido y la más actualizada, para el momento en el que este libro se escribe, es la 5.16.x. Esta versión es la utilizada para la ejecución de los scripts que se describen en este libro.

El 26 de octubre de 1995, se creó el Comprehensive Perl Archive Network (CPAN). CPAN es una colección de scripts y módulos. Originalmente, cada sitio CPAN debía ser accedido a través de su propio URL; hoy en día, http://www.cpan.org redirecciona automáticamente a uno de los cientos de repositorios espejo de CPAN. Se dispone de módulos para una amplia variedad de tareas, incluyendo matemáticas avanzadas, conectividad de bases de datos y conexión de redes. Esencialmente, todo lo que hay en CPAN está disponible de forma libre (http://es.wikipedia.org/wiki/CPAN) La mayor parte del software está licenciado bajo la Licencia Artística, la GPL o ambas. Cualquiera puede subir software a CPAN vía PAUSE, el Perl Authors Upload Server (servidor de subidas de autores Perl)


1.2 Vistazo

Perl es un lenguaje de programación originalmente desarrollado para manipulación de texto y actualmente se utiliza para una amplia variedad de tareas, incluyendo administración de sistemas, desarrollo web, programación de redes, desarrollo GUI (Graphical User Interface – Interfaz Gráfica de Usuario) y mucho más.

La intención de Perl es que sea práctico (fácil de usar, completo), en lugar de hermoso (pequeño, elegante, minimalista) Sus mejores características incluyen soporte para múltiples paradigmas de programación (procedimientos, orientado a objetos, estilos funcionales), soporte para procesamiento de texto y una gran colección de módulos hechos por terceros.


1.3 Características

En general, la estructura de Perl proviene ampliamente de C. Perl es procedimental en su naturaleza, con variables, declaraciones de asignación, bloques de código encerrados en corchetes, estructuras de control y subrutinas.

Perl también toma características de la programación shell. Todas las variables son marcadas con un Sigilo precedente (Sigil, en inglés). Los sigilos identifican inequívocamente los nombres de las variables, permitiendo a Perl tener una rica sintaxis (como el signo $ delante de una variable para especificar números, caracteres, cadenas de texto, el signo @ para identificar arreglos, el signo % para especificar hashes). Notablemente, los sigilos permiten interpolar variables directamente dentro de las cadenas de caracteres (strings). Como en los shell, Perl tiene muchas funciones integradas para tareas comunes y para acceder a los recursos del sistema.

Otras características importantes son:

- Perl toma las mejores características de otros lenguajes de programación como C, awk, sed, sh y BASIC, entre otros.

- La interfaz para integración de bases de datos de Perl soporta bases de datos como Oracle, Sybase, Postgres, MySQL y otros.

- Perl trabaja con HTML, XML y otros lenguajes de anotaciones.

- Soporta Unicode.

- Es Y2K compatible.

- Soporta programación basada en procedimientos y orientada a objetos.

- Puede interactuar con librerías externas en C/C++ a través de XS o SWIG.

- Es extensible. Hay más de 100 mil módulos hechos por terceros disponibles en CPAN.

- El intérprete puede ser incorporado (embedded) en otros sistemas.


1.4 Recursos

Me gusta trabajar con la versión de Perl disponible en ActiveState (http://www.activestate. com/) Allí se pueden encontrar versiones ya compiladas de Perl para Unix, Linux, Solaris, Windows y Mac. Adicionalmente tienen muchísimos módulos ya compilados listos para usar.

En el sistema operativo de Mac, Unix y Linux ya viene instalado Perl por defecto. Sin embargo, esta versión no viene lista para la programación de interfaces gráficas. Es por ello que es recomendable instalar otra versión de Perl, en particular recomiendo la que mantiene ActiveState que es la más completa que conozco. No es necesario eliminar la que ya viene instalada. Una vez instalada la nueva versión, es necesario crear el archivo .bash_profile (o editarlo) que se encuentra en el directorio home (home directory)

Al archivo deben agregársele las siguientes líneas:

PATH=/usr/local/ActivePerl-5.16/bin:$PATH

PATH=/usr/local/ActivePerl-5.16/site/bin:$PATH

export PATH


Este archivo, por ser del sistema, no se muestra visible cuando se hace un listado de archivos (con el comando ls por ejemplo)

En este caso, la versión instalada es la 5.16 (véase en las líneas 1 y 2 que aparece la palabra ActivePerl-5.16) Es necesario verificar que en efecto, la nueva versión de Perl haya quedado instalada según se muestra en el código anterior.

Para que los cambios tengan efecto de inmediato, se ejecuta desde la línea de comandos:

[ILUSTRACIÓN OMITIR]

En el sistema operativo Windows no viene instalado Perl, por lo que la creación del archivo .bash_profile no aplica. La instalación de Perl en Windows automáticamente agrega las variables necesarias al PATH para que este disponible desde cualquier lugar dentro del sistema.


1.5 IDE's (entornos de desarrollo integrado) para PERL

Es posible escribir código en Perl usando un editor de texto como TextEdit (Mac), notepad o wordpad. Sin embargo, es posible encontrar varios programas conocidos como IDE (entornos de desarrollo integrado), que no son más que editores de texto especiales que reconocen la sintaxis de un lenguaje de programación. Algunos de ellos son libres y otros hay que pagar por su uso. A continuación se mencionan algunos muy Buenos que son libres de cargo:


1.5.1 Editores para Windows

Los siguientes editores sólo están disponibles para Windows:

Open Perl IDE

Este es una de los mejores IDE para hacer scripts en Perl. Esta disponible para Windows y se puede descargar desde http://open-perl-ide.sourceforge.net.


Perl Express

Otra interesante IDE es Perl Express. Está disponible en versión para Windows y se puede descargar desde http://www.perl-express.com/.


Notepad++

Este es mi editor favorito para hacer scripts en Windows. Está disponible en http://notepad-plus-plus.org/


1.5.2 Editores multiplataforma

Los siguientes editores están disponibles para Windows, Linux y Mac:


Padre

Está disponible en http://padre.perlide.org/. La versión para Mac aún no es estable completamente.


Komodo

Esta IDE es desarrollada por ActiveState y está disponible en http://www. activestate.com/komodo-edit/downloads.


1.6 Ejecutar un script.

Hay algunas IDE que permiten ejecutar los scripts directamente. Sin embargo, también pueden ser ejecutados desde una ventana de comandos como la que se muestra en la figura 1.2. En este caso se trata de una command prompt de Windows.


1.7 Links de interés

http://www.perl.org/

http://en.wikipedia.org/wiki/Perl

http://www.perl.com/

http://www.tkdocs.com

http://www.activestate.com/activeperl


1.8 Script de este libro

Los scripts de este libro estarán disponibles en la página web: www.geoscience4all.com. También puede escribir directamente al autor: dorian@geoscience4all.com.

CHAPTER 2

Tipos de variables y operadores


2.1 Introducción

Aun cuando se asume que el lector tiene un conocimiento básico de Perl, se dará una explicación breve acerca de los aspectos que se consideran más importantes para hacer aplicaciones simples y poderosas.


2.2 Tipos de variables

2.2.1 Escalares

Un escalar representa un simple valor que puede ser una cadena (string), un entero (integer) o un número de coma flotante (floating point number) A diferencia de otros lenguajes como C, en Perl no es necesario declarar el tipo de variable. No importa si estamos hablando de un entero, doble, real, booleano, etc., Perl automáticamente hace la conversión entre ellos en la medida en que se requiera.

Ejemplo de escalares:

$a=25;

$text1="Esto es un ejemplo de una cadena";

$text2='Este es otro ejemplo de cadena';

Lo importante es recordar que el nombre de las variables debe comenzar con el signo $.


2.2.1.1 Cadenas

Una cadena es una secuencia de caracteres puestas juntas como una unidad. Las cadenas pueden ser de cualquier longitud y contener cualquier carácter, número, signo de puntuación, carácter especial (como por ejemplo ¡, #, %), incluyendo caracteres en otros lenguajes además del inglés. Adicionalmente, una cadena puede contener caracteres especiales ASCII de formateo como "nueva línea" (new line) o tabulador (tab) En Perl, las cadenas deben ser encerradas entre comillas simples o dobles como por ejemplo 'hola a todos' o "hola a todos". Veamos el siguiente ejemplo:


Script 2.1

1 $a='hello everybody';

2 $b="hello everybody";

3 print "$a\n$b\n";

En este ejemplo, la salida se verá tal como se muestra en la figura 2.1.


Tal como puede notarse, la salida en ambos casos es la misma. Sin embargo, ahora haremos algunos cambios para ver las diferencias entre comillas simples y comillas dobles. Imagine por un momento que estamos interesados en escribir la expresión: hello 'everybody':

Script 2.2

1 $a='hello \'everybody\";

2 $b="hello 'everybody'";

3 print "$a\n$b\n";


En este caso, el resultado de la ejecución del script puede verse en la figura 2.2


Para poder introducir comilla simple en la construcción de la primera cadena, fue necesario incluir el carácter especial "\" (slash invertido), ya que estamos usando comillas simples para construir la frase. Podemos lograr la misma salida, usando comidas dobles para encerrar la expresión, sin necesidad de usar caracteres especiales.

Ahora veamos cómo escribir la expresión: hello "everybody". Observe los cambios hechos al script:

Script 2.3

1 $a='hello "everybody"';

2 $b="hello \"everybody\";

3 print "$a\n$b\n";

La salida será como se muestra en la figura 2.3.


Debido a que en Perl hay varios caracteres de escape, como los tabs, enter, espacios, etc., es necesario ser cuidadoso con su manejo.

Por ejemplo, en cadenas interpoladas de doble comilla, varias secuencias precedidas por el carácter "\" tienen un comportamiento diferente. La siguiente tabla muestra los usos más usos más comunes de estos:

[TABLA OMITIR]


Veamos el siguiente script:

Script 2.4

1 print "Un backslash: \\\n";

2 print "Despues del tabulador:\tel cursor se posiciona aqui\n";

3 print "Ring! \a\n";

4 print "Donar a dorian\@eltigrecity.com \$20000.\n";


La figura 2.4 muestra la salida del script:

[ILUSTRACIÓN OMITIR]

Otro aspecto importante que podemos ver cuando trabajamos con cadenas es que cualquier variable escalar es interpolada cuando se incluye dentro de comillas dobles. Esto significa que Perl reemplaza dentro de la cadena el valor de la variable.

Miremos el siguiente script:

Script 2.5

1 print "Indique por favor su año de nacimiento?\n";

2 $year=<STDIN>;

3 ($sec,$min,$hour,$mday,$mon,$Cyear,$wday,$yday,$isdst) = localtime time;

4 $currentYear=1900+$Cyear;

5 $age=$currentYear-$year;

6 $a="Hola";

7 $friend="querido lector";

8 print "$a $friend, tu edad aproximada es $age años\n";


Cuando se ejecuta el programa, la ventana luce como se muestra en la figura 2.5.

El programa está esperando que el usuario introduzca un valor, en este caso su año de nacimiento. Esto se logra gracias a la variable especial "STDIN". Esta variable recoge el valor introducido por el usuario después de presionar enter y se almacena en la variable $year (línea 2)

Después de introducir la información, el programa continúa su ejecución y el resultado final se muestra en la figura 2.6.

El cálculo de la edad puede hacerse en la misma línea donde se imprime el resultado (línea 8 del script anterior) Veamos cómo quedaría el script con este cambio:

Script 2.6

1 print "Indique por favor su año de nacimiento?\n";

2 $year=<STDIN>;

3 ($sec,$min,$hour,$mday,$mon,$Cyear,$wday,$yday,$isdst) = localtime time;

4 $currentYear=1900+$Cyear;

5 $a="Hola";

6 $friend="querido lector";

7 print "$a $friend, tu edad aproximada es ".($currentYear-$year)." años\n";


Este script generará el mismo resultado que el script 2.5. Observe cuidadosamente la línea 7. El cálculo se ha hecho en la misma línea donde está la instrucción print. Sin embargo, para obtener el valor del cálculo, la operación debe ser encerrada en paréntesis. También es necesario usar un operador de concatenación, que en Perl es el punto "." Como la operación se está haciendo directamente en la línea 7, no es necesario usar la variable $age que en el script 2.5 estaba en la línea 5, por lo que esa línea se eliminó. Sugiero que hagas la prueba por ti mismo, cambiando la línea 7 por la siguiente instrucción (en la cual se han retirado los paréntesis y el operador de concatenación.

print "$a $friend. tu edad aproximada es $currentYear-$year años\n";


2.2.1.2 Números

Perl tiene la habilidad de manejar tanto números enteros como de coma flotante en rangos bastante razonables. Hay tres formas básicas para expresar números en Perl. La forma más simple es escribir un valor entero, sin el punto decimal, como por ejemplo el número 35. Es posible escribir números con punto decimal (o coma), como por ejemplo 35.7.

La forma más compleja de escribir números es usando notación exponencial. Estos son números de la forma a * 10x, donde "a" es algún número decimal, positivo o negativo y "x" es un entero, positivo o negativo. De esta forma es posible expresar números muy grandes o muy pequeños. Por ejemplo 1.3*106 podría ser escrito en Perl: 1.3E6. 3.56*10-5 podría ser 3.5E-5.

Algo que es interesante resaltar en Perl es que, para facilitar la lectura, los números muy grandes pueden ser escritos como se muestra en el siguiente ejemplo:

235354729352 -> 235_35_47_29_352.

Demos un vistazo al siguiente script que muestra cómo se haría lo mostrado con el ejemplo anterior.

Script 2.7

1 $a=235_35_47_29_352;

2 print "$a\n";


El símbolo "_" hace que el número sea más fácil de leer.

La figura siguiente muestra la salida del script 2.7.


2.3 Operadores

Hay una amplia variedad de operadores que funcionan sobre valores escalares y variables. Estos operadores nos permiten manipular escalares en diferentes formas. En esta sección se discute los operadores más comunes.


2.3.1 Operadores numéricos

Los operadores numéricos básicos en Perl son como otros que quizás hayas visto en otros lenguajes de alto nivel. De hecho, los operadores numéricos de Perl fueron diseñados para imitar aquellos usados en el lenguaje C. Para una mejor comprensión, demos un vistazo al siguiente script:

Script 2.8

1 $a=3.5*3-1;

2 $b=5*$a/6;

3 $c=(5**2)**3;

4 $d=($c-sqrt(5))**2;

5 $e=$a%6;

6 print "a = $a\nb = $b\nc = $c\nd = $d\ne = $e\n";


La próxima tabla muestra cómo lucen las expresiones matemáticas de las ecuaciones escritas en el script 2.8.


(Continues...)

Excerpted from Perl para Geocientíficos by Dorian Oria San Martín. Copyright © 2013 Dorian Oria San Martín. Excerpted by permission of Trafford Publishing.
All rights reserved. No part of this excerpt may be reproduced or reprinted without permission in writing from the publisher.
Excerpts are provided by Dial-A-Book Inc. solely for the personal use of visitors to this web site.

Table of Contents

Contents

A modo de otra introducción, ix,
Parte I. Introducción,
Capítulo 1, 1,
Parte II. Revisando lo básico,
Capítulo 2: Tipos de variables y operadores, 11,
Capítulo 3: Estructuras de Control, 31,
Capítulo 4: Arreglos y hashes, 49,
Capítulo 5: Manipulando archivos de texto, 65,
Capítulo 6: Subrutinas y Módulos, 92,
Parte III. Programación gráfica,
Capítulo 7: El poder de Perl Tkx, 105,
Parte IV. Ejemplos prácticos,
Capítulo 8: Registros de pozo (Well logs), 185,
Capítulo 9: Archivos con modelos de velocidades, 201,
Capítulo 10: Archivos SEG-Y, 217,
Anexos,
Anexo 1: Adquisición de datos sísmicos, 237,
Anexo 2: Archivos SEG-D, 285,
Referencias, 293,

Customer Reviews

Most Helpful Customer Reviews

See All Customer Reviews