domingo, 26 de agosto de 2007

Manual de Perl (III): Primer programa

Ahora que ya tenemos una plantilla y algún conocimiento básico del interprete de Perl vamos a empezar a programar.


Script Hello World

Empezaremos con el programa con el que empiezan el 90% de los programadores de Perl, el "Hello World!". La idea es simple: lograr que imprima esa frase por pantalla.
En este programa utilizamos una función integrada llamada print(), que envía salidas a una localización específica. En este caso dicha localización es la salida estándar (STDOUT), es decir, la pantalla.

Para comenzar tomaremos la plantilla y la rellenaremos con nuestra información, como nombre, versión, fecha, autor y descripción. Una vez tengamos esto guardaremos el archivo como Hello.pl. Este es un programa muy simple, sólo contiene una línea de código.
#!/usr/bin/perl -w
#--------------------
#Script Name: Hello.pl
#Script Version: 1.0
#Date: 26.08.2007
#Author: goblin
#Description: Imprime "Hello World!" en pantalla
#Revision History:
# 1.0/: original version
#--------------------

print "Hello World!\n";

En próximos artículos explicaremos el caracter \n, junto con otros como él. Representa un caracter de salto de línea y hace que el cursor se ponga en la siguiente línea al ejecutar el programa. Para ver la diferencia probad con él y sin él.

Ahora, para ejecutar el programa, debemos hacer lo siguiente:

  • UNIX: Antes de nada debemos hacer el fichero ejecutable. Esto se hace con chmod 755 Hello.pl o chmod +x Hello.pl. Para más información sobre chmod teclea man chmod. Ahora podremos ejecutarlo con ./Hello.pl.
  • Windows: perl Hello.pl
  • Mac OS: Arrastrar el archivo Hello.pl y soltarlo sobre el icono MacPerl, después seleccionar Run Hello.pl desde el menú Script.
Los que programéis en otros lenguajes habréis notado que no usamos paréntesis () con la función "print()". En Perl se pueden usar o no, a nuestra elección.

Ahora que ya tenemos nuestro primer programa vamos a modificarlo para que sea un poco más interesante. Haremos un script que nos pregunte el nombre, procese la respuesta y devuelva un resultado por pantalla.
En este caso utilizaremos una nueva función llamada chomp(), que quita un caracter de nueva línea al final de una cadena. Al aceptar la entrada de datos desde la línea de comandos, el (caracter de) retorno que pulsa el usuario también se almacena en la cadena. Con el uso de chomp, eliminamos ese caracter extra de nueva línea y nos centramos solamente en los datos alfanuméricos ingresados.

Perl también tiene una función llamada chop() que quita el último caracter de una cadena. A diferencia de chomp(), chop() elimina cualquier caracter, sea cual sea, mientras que chomp() sólo elimina si es un caracter de nueva línea. Por lo que siempre que necesitemos eliminar únicamente un caracter de nueva línea es más seguro utilizar chomp().

Lo primero será obtener los datos del usuario. La manera de hacer esto es imprimir algún texto en pantalla que pida el nombre y luego leer lo que el usuario introduce, guardándolo en una variable. A esta información, que es leída a través de la entrada estándar (STDIN), se le puede aplicar fácilmente la función chomp. Como esta información está en una variable, también es fácil reutilizar dicha variable para nuestra instrucción de impresión.

# !/usr/bin/perl
#-----------------
# Script Name: Hello.pl
# Script Version: 2.0
# Date: 26.08.2007
# Author: goblin
# Description: Prompts user for name, strips of newline character
# and prints " Hello !" screen where name = the text entered.
# Revision History:
# 1.0: original version
# 2.0: added prompt for user's name and returned text based on it.
#-----------------

# ask user for name
print "What is your name? ";
$input = ;

# remove newline character
chomp($input);

# print results to page
print "Hello $input!\n";


Vemos que es posible utilizar $input dentro de las comillas de la función print.
Si hubiéramos usado comillas simples habría enviado "$input" literalmente a la pantalla.

Ahora probad vuestro programa y si tenéis alguna duda dejadla en los comentarios.

No hay comentarios: