Title: Sistema Operativo UNIX
1Sistema Operativo UNIX
- Lección 10 Programación en Perl Parte I
- Prof. Antonio F. Huertas
2Qué es Perl?
- Perl (Practical Extraction and Report Language)
fue desarrollado por Larry Wall en 1987 como un
lenguaje que ocuparía un espacio intermedio entre
los lenguajes de scripts de UNIX y lenguajes
compilados tradicionales tales como C y C. - Perl combina aspectos de utilitarios tales como
grep, tr, sed y awk, además de construcciones de
lenguajes tales como el Bourne Shell y C. - Perl es muy utilizado como lenguaje para
desarrollo de sistemas de información para el
Web, programas bioinformáticos y programas para
ayudar a administradores de sistemas.
3Qué es Perl? (Cont.)
- En Perl no es necesario compilar el código fuente
de un programa para poder ejecutarlo (al igual
que en los lenguajes interpretados y los
scripts). - Sin embargo, los programas son compilados en RAM
justo antes de ejecutarse, así que ejecutan más
rápido que si fueran interpretados de la forma
tradicional. - Lo anterior quiere decir que un programa en Perl
es más rápido que un script del shell o de awk y
que cualquier mensaje de error de sintaxis se
muestra antes de ejecutar el programa.
4Fundamentos
5Ejemplo de un programa
- !/usr/bin/perl
- km_to_mi.pl
- This program computes the equivalent miles to
- the number of kilometers entered by the user.
-
- print ("Enter the amount of kilometers ")
- kilometers ltSTDINgt
- chomp (kilometers)
- miles kilometers 1.609
- print ("The equivalent amount in miles is
miles\n")
6Conceptos básicos
- Los programas en Perl comienzan con una línea que
indica donde está el interpretador. Esta línea es
una de las siguientes - !/usr/bin/perl
- !/bin/perl
- Esto permite ejecutar el script escribiendo el
nombre del programa en la línea de comandos (si
el script es ejecutable use chmod x
scriptname). - Los programas en Perl terminan normalmente en .pl
- Los comentarios se indican de la misma forma que
en los scripts del shell - Esto es un comentario
7Variables y enunciados de asignación
- No es necesario declarar las variables.
- El nombre de toda variable que represente un
valor simple (escalar), tales como un valor
numérico o un valor alfanumérico, se escribe
siempre precedido de . Por ejemplo, - x 5
- y x 20
- x
- w x y
- No hay problemas con colocar espacios entre los
operandos y los operadores en un enunciado de
asignación.
8Variables y enunciados de asignación (cont.)
- Como en el shell, las variables son todas del
tipo string y se convierten a numéricas de
acuerdo a la operación que se realiza con ellas. - Los strings se escriben normalmente entre
comillas dobles. - Si un string se escribe entre comillas sencillas,
se inhibe la interpretación de variables y de
secuencias de escape (como en el shell). - Si una variable no se inicializa, su valor es
undef. - El valor undef corresponde al string nulo o al
cero (0), dependiendo del uso.
9Output a la pantalla
- La función print permite mostrar datos en la
pantalla. Por ejemplo, - print("Me encanta UNIX!\n")
- Fíjese el uso de "\n". Además de "\n" , Perl
reconoce otras secuencias de escape de C. - Los paréntesis en las llamadas a funciones son
opcionales en Perl, así que la instrucción
anterior se podría escribir así - print "Me encanta UNIX!\n"
- Perl provee también la función printf que permite
mostrar valores con formato. Por ejemplo - printf("15s 5d 10.2f\n", s, n, r)
10Input del teclado
- Para obtener un dato entrado por el usuario y
colocarlo en una variable se usan las siguientes
instrucciones - variable ltSTDINgt
- chomp(variable)
- ltSTDINgt es un filehandle (nombre lógico de
archivo) que representa el standard input. - La funcion chomp remueve el "\n" del contenido de
la variable. Es necesaria porque el valor
entrado por el usuario, incluyendo el "\n" es
almacenado en la variable y hay que removerlo. - Las instrucciones anteriores se pueden combinar
así - chomp(variable ltSTDINgt)
11Operadores
- Los operadores aritméticos son los mismos que en
C (, -, , /, , , --), pero se incluye el
operador para exponenciación. - El operador de concatenación es el punto. Por
ejemplo - full_name first_name . last_name
- La x es usada como operador para repetición de
strings. Por ejemplo - print("casa" x 3 . "\n") produce 'casa casa
casa ' - Se permite la sustitución de comandos. Por
ejemplo, - the_date date
12Operadores (cont.)
- En cuanto a los operadores relaciones, los
números son comparados como en C lt, gt, , !,
lt, gt. - Los alfanuméricos son comparados con operadores
semejantes a los del shell lt, gt, eq, ne, le,
ge (pero sin el guión). Fíjese que el shell
usaba estos operadores para comparar números pero
Perl los usa para comparar strings. - Los operadores lógicos son (and), (or) y !
(not). - Perl tiene el operador condicional de C (?),
como muestra este ejemplo - greater (a gt b)? a b
- Los valores true y false se definen como en C.
13Funciones para strings
14Funciones para strings
- Uno de los puntos fuertes de perl son las
funciones para el manejo de strings. - Algunas funciones para el manejo de strings son
length, index, substr, uc, ucfirst, lc, lcfirst. - La función length indica la cantidad de
caracteres en un string. - La función index indica el índice de la primera
ocurrencia de un substring dentro de un string
(asumiendo que el primer índice es 0). Si el
substring no se encuentra, se devuelve -1.
15Funciones para strings (cont.)
- La función substr puede ser usada para extraer,
reemplazar o para insertar un substring. - Las funciones uc y lc son usadas para convertir
un string a letras mayúsculas o minúsculas,
respectivamente. - Las funciones ucfirst y lcfirst son usadas para
convertir el primer caracter del string a letra
mayúscula o minúscula, respectivamente.
16Funciones para strings (cont.)
- Algunos ejemplos, asumiendo
- word "perl language"
- Para ver la longitud del string
- print(length(word). "\n") 13
- Para ver el índice donde comienza el substring
"lang" - print(index(word, "lang"). "\n") 5
- Para ver el substring que comienza en el índice 5
y que contiene 3 caracteres - print(substr(word, 5, 3). "\n") lan
17Funciones para strings (cont.)
- Para ver el substring que comienza en la 3ra
posición de derecha a izquierda y que contiene 2
caracteres - print(substr(word, -3, 2). "\n") ag
- Para reemplazar el substring que comienza en la
posición 5 y que contiene 8 caracteres por el
substring "programming". - substr(word, 5, 8) "programming"
- print("word\n") perl programming
18Funciones para strings (cont.)
- Para insertar el substring "abc" en el string
original a partir del índice 2, sin reemplazar
caracteres - substr(word, 2, 0) "abc"
- print("word\n") peabcrl programming
- Para mostrar el string con letras mayúsculas
- print(uc(word). "\n")
- PEABCRL PROGRAMMING
- Para mostrar el string con la primera letra
mayúscula - print(ucfirst(word). "\n)
- Peabcrl programming
19Estructuras de control
20Estructuras de control
- Perl provee estructuras de control como los que
se encuentran en C. - Sin embargo, la sintaxis de estos enunciados
requiere siempre el uso de las llaves, aún cuando
sólo haya un enunciado en el cuerpo de la
estructura de control.
21Estructuras de control (cont.)
- Enunciado if para una alternativa
- if (condición)
- enunciado(s)
-
- Enunciado if para dos alternativas
- if (condición)
- enunciado(s)
-
- else
- enunciado(s)
- Enunciado if para múltiples alternativas
- if (condición)
- enunciados
-
- elsif (condición)
- enunciados
-
- else
- enunciados
22Estructuras de control (cont.)
- Ejemplo de if
- if (promedio gt 90)
- nota "A"
-
- elsif (promedio gt 80)
- nota "B"
-
- elsif (promedio gt 70)
- nota "C"
-
- else
- nota "F"
23Estructuras de control (cont.)
- Enunciado unless
- unless (condición)
- enunciado(s)
-
- Ejemplo usando unless
- unless (age lt 18)
- print (Adult.)
- Equivalente a
- if (! condición)
- enunciado(s)
-
- Ejemplo usando if
- if (age gt 18)
- print (Adult.)
24Estrucuturas de control (cont.)
- Enunciado while
- while (condición)
- enunciado(s)
-
- Enunciado until
- until (condición)
- enunciado(s)
- Enunciado do-while
- do
- enunciado(s)
- while (condición)
- Enunciado do-until
- do
- enunciado(s)
- until (condición)
25Estrucuturas de control (cont.)
- Enunciado for
- for (inicialización comparación actualización)
- enunciado(s)
-
-
- for variable (valorInicial..valorFinal)
- enunciado(s)
-
- Otra estructura de control es foreach. Es usada
para recorrer arreglos y se discutirá en la
próxima lección.
26Estrucuturas de control (cont.)
- Ejemplos de ciclos
- x 1
- while (x lt 10)
- print(2 x . " ")
- x
-
- for (x 1 x lt 10 x)
- print(2 x . " ")
-
- for x (1..10)
- print(2 x . " ")
27Estructuras de control (cont.)
- Cuando se tiene una instrucción en el cuerpo de
algunas estructuras de control, se puede usar la
siguiente sintaxis - enunciado if (condicion)
- enunciado unless (condicion)
- enunciado while (condicion)
- enunciado until (condicion)
- Por ejemplo
- print "Adult.\n" unless age lt 18
- print "Adult.\n" if age gt 18
- print "line\n" while (line ltINDATAgt)
28Para más información
- Consulte los siguientes capítulos de Learning
Perl, 2da edición - Chapter 1 Introduction
- Chapter 2 Scalar Data
- Chapter 4 Control Structures
- Chapter 15 Other Data Transformations
- Sec. 15.1 Finding a Substring
- Sec. 15.2 Extracting and Replacing a Substring