Tutorial Perl desde cero

Iniciado por WHK, 7 Noviembre 2007, 04:15 AM

0 Miembros y 1 Visitante están viendo este tema.

WHK

Como veo que no hay mucho material de Perl acá y si varios interesados... les dejo un tutorial que acabo de hacer... otro dia termino la segunda parte.

Programación en Perl I

Al igual que ustedes yo también aprendo por lo cual quiero compartir lo que yo se con ustedes para que todos juntos podamos aprender cada ves mas.

Perl es un lenguaje scripting interpretado, eso significa que necesitamos un software que leerá nuestros scripts y los ejecutará.
Les demostraré que tan facil puede ser aprender este lenguaje tan flexible, útil y facil de aprender.
Este tutorial va dedicado a usuarios de Linux en todas sus distribuciones ya que por defecto viene el software que ejecutará nuestros scripts llamado "Perl", en el caso de Windows tendrás que instalar "Active Perl" y "Cygwin" para acomodar cada función de linux y hacer mas poderosos nuestros scripts.

Mi primer script
Abrimos nuestro editor de texto (en Linux podemos usar gedit, kwrite o lo que sea... en Windows usaremos el block de notas) y comenzaremos a crear nuestro primer script:

Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test.pl

print "hola\n";
exit(0);


¿Que significa cada linea, como lo ejecutamos y que hace?
Cada linea que comienza con el carácter "#" será omitido al momento de ejecutarse el script, esto significa que son comentarios o cualquier cosa que quieras escribirle, esto no se ejecutará ni será tomado en cuenta.
En el caso de linux esto significa que es un código en perl e indica la dirección de perl, esto siempre Debes ponerlo al rpincipio, si no lo pones no pasa nada pero si se hace por costumbre para identificar que es un script en perl. Al pasar el mouse sobre el archivo este tomará el ícono de ejecutable devido a esa primera linea y será cosiderado un "script en Perl".
Código (perl) [Seleccionar]
#!/usr/bin/perl -w

Ahora pongo un comentario para indicar el nombre del archivo (esto no es obligación pero yo lo puse para mayor orden).
Código (perl) [Seleccionar]
#test1.pl

Ahora ejecutamos un print para escribir en pantalla la palabra hola. Esto puede crearse de muchas maneras según lo necesites, también esribimos "\n" el cual significa que al final de la palabra hola se escribirá el carácter "return" para seguir en la linea de abajo.
Código (perl) [Seleccionar]
print "hola\n";

Esto también podemos ejecutarlo de las siguientes maneras:
Código (perl) [Seleccionar]
print "hola";
print("hola");
print 'hola';
print('hola');


Al igual que en el lenguaje C++ puedes utilizar "printf" de la misma manera pero no "echo".

Acá le decimos que es el término del script, puedes no ponerlo pero se hace por costumbre en un buén script. Cuando digo exit(0) significa que no hubo errores, si escribo exit(1) le estoy diciendo al sistema que se produjo un error o los resultados no fueron lo esperado, esto lo puedes utilizar en complementos que veremos en otra oportunidad.
exit(0);

¿Como lo ejecutamos?
Guardaremos nuestro texto en el escritorio como test1.pl y desde la consola de comandos ejecutaremos lo siguiente:
En Linux:  perl ./test.pl
En Windows: c:\perl\perl.exe "%homepath%\escritorio\test.pl"


Nos aparecerá la palabra hola :D
Citaryan@Lola:~/Desktop$ perl ./test.pl
hola
yan@Lola:~/Desktop$

Ahora para practicar escribiremos algunos textos en pantalla:
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test2.pl

print "hola,\n";
print "Como puedes ver acá escribio que sea sin problemas y con el carácter '\\n' hago return.\n";
printf "También puedo utilizar printf de la misma manera. Ahora vamos a salir del programa:\n";
exit(0);
print("Como ves esto no se ejecuta porque ya salí :p");



While y for
Estas dos funciones son muy útiles para automatizar todo un proceso:
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test3.pl

my $cuenta = 1;

#-------------------------------------------------------------------------------------------------
print "Escribiremos desde 000 hasta 100\n";
for $i ( "000" .. "100" ) {
print "$i\n";
}
#-------------------------------------------------------------------------------------------------
print "Escribiremos 100 más, pero con while:\n";
while ( $cuenta <= 100 ) {
print "$cuenta\n";
$cuenta++;
}
#-------------------------------------------------------------------------------------------------
print "Fijate que si no le pongo comillas no tomará los ceros al comienzo:\n";
for $i ( 000 .. 100 ) {
print "$i\n";
}
#-------------------------------------------------------------------------------------------------
exit(0);


¿Que tal si me escribes en pantalla 100 veces la frase "no molestaré mas a mis compañeros" ? a Vart de los Simpsons de seguro le gustaría jajaja:
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test4.pl

for $i ( "000" .. "100" ) {
print "No molestaré mas a mis compañeros.\n";
}
exit(0);


Si te fijas utilizé tres formas diferentes de hacer lo mismo, además con el carácter "#" puse unas lineas para separar cada código y así se vea mas ordenado.

Ustedes dirán... ¿Para que sirve "my $cuenta = 1;"? :

Declaraciones
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test5.pl

my $saludo = "Hola";
my $nombre = "WHK";

print "$saludo $nombre , como estas?";
exit(0);


Esto nos escribirá lo siguiente:
Citaryan@Lola:~/Desktop$ perl ./test5.pl
Hola WHK , como estas?
yan@Lola:~/Desktop$

También podemos crear una declaración de diferentes formas:
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test6.pl

my ($saludo, $nombre);
$saludo = "Hola";
$nombre = "WHK";

print "$saludo $nombre , como estas?\n";
exit(0);


Variables
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test7.pl

my ($saludo, $nombre);
unless (@ARGV == 1) { die "uso: $0 Nombre\n" } ($nombre) = @ARGV;
$saludo = "Hola";

print "$saludo $nombre , como estas?\n";
exit(0);

¿Que significa esto?
No se asusten :p es facil, es mas... puedes copiar el código y usar siempre el mismo, solo cambias ciertas cosas que te diré ahora,

Cuando ejecutas tu script te dirá lo siguiente:
Citaryan@Lola:~/Desktop$ perl ./test7.pl
uso: ./test.pl Nombre
yan@Lola:~/Desktop$ perl ./test7.pl WHK
Hola WHK , como estas?
yan@Lola:~/Desktop$

Si te fijas la primera ves que lo ejecuté me decía como utilizarlo... que primero debería ejecutar el script mas un espacio y el nombre, al ejecutarlo nuevamente le di mi nombre y me lo escribió...
Citaryan@Lola:~/Desktop$ perl ./test7.pl Octalh
Hola Octalh , como estas?
yan@Lola:~/Desktop$

Ahora implementemos variables con declaraciones for o while :D, no se asusten con tanta palabrería porque no es  tan dificil cuando escribes por ti mismo el código:
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test8.pl

my ($cuenta);
unless (@ARGV == 1) { die "uso: $0 Cuenta\n" } ($cuenta) = @ARGV;

for $i ( 1 .. $cuenta ) {
print "Escribiendo $i...\n";
}

exit(0);


Esto me dará lo siguiente:
Citaryan@Lola:~/Desktop$ perl ./test8.pl 10
Escribiendo 1...
Escribiendo 2...
Escribiendo 3...
Escribiendo 4...
Escribiendo 5...
Escribiendo 6...
Escribiendo 7...
Escribiendo 8...
Escribiendo 9...
Escribiendo 10...
yan@Lola:~/Desktop$

Si quieres agregar mas de una variable tendrás que modificar su código:
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test9.pl

my ($cuenta, $palabra);
unless (@ARGV == 2) { die "uso: $0 [Palabra] [Cuenta]\n" } ($palabra, $cuenta) = @ARGV;

for $i ( 1 .. $cuenta ) {
print "$palabra $i...\n";
}

exit(0);


Esto quiere decir:
Código (perl) [Seleccionar]
unless (@ARGV == 2) { die "uso: $0 [Palabra] [Cuenta]\n" } ($palabra, $cuenta) = @ARGV;
Si las variables no son 2 entonces que no ejecute nada y que diga su utilización y si hay dos variables entonces la primera será $palabra y la segunda será $cuenta. Puedes modificar ese orden a tu gusto o agregarles las variables que tu quieras. $0 significa el nombre del mismo archivo que estás ejecutando.

If y Else
Ahora les voy a mostrar algo muy útil:
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test10.pl

my ($cuenta, $palabra);
unless (@ARGV == 2) { die "uso: $0 [Palabra] [Cuenta]\n" } ($palabra, $cuenta) = @ARGV;

if ($cuenta == 0) {
     $cuenta = 10;
}

else {
     for $i ( 1 .. $cuenta ) {
     print "$palabra $i...\n";
     }
}

exit(0);


Esto significa que cuando ejecutes el script primeramente verificará la variable:
Código (perl) [Seleccionar]
unless (@ARGV == 2) { die "uso: $0 [Palabra] [Cuenta]\n" } ($palabra, $cuenta) = @ARGV;

Luego verificará que si la variable $cuenta es igual a cero entonces le asignará el número 10
Código (perl) [Seleccionar]
if ($cuenta == 0) {
     $cuenta = 10;
}


Si no es igual a cero entonces escribirá en pantalla lo pedido:
Código (perl) [Seleccionar]
else {
     for $i ( 1 .. $cuenta ) {
     print "$palabra $i...\n";
     }
}


Y como siempre al final termina todo:
Código (perl) [Seleccionar]
exit(0);

Ahora utilizaremos if para saber si existen archivos o no:
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test11.pl

if (-e "test2.pl") {
print "Si existe\n";
} else {
print "No existe\n";
}

exit(0);


Lo mismo pero con variables:
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test12.pl

my ($archivo);
unless (@ARGV == 1) { die "uso: $0 [archivo]\n" } ($archivo) = @ARGV;

if (-e $archivo) {
print "$archivo si existe\n";
} else {
print "$archivo no existe\n";
}

exit(0);


Ahora que ya sabes un poco mas sobre scripts en Perl deverás practicar creando tus propios códigos cada ves más complejos o hasta donde esté tu conocimiento e imaginación.

En el próximo número publicaré un script que estoy creando, como averigüé sobre cada función y muchas otras cosas más como el uso de sockets y uso de comandos system();.

Saludos y hasta la próxima. Att. WHK.
Puedes bajar el documento en formato odt en tar.gz desde acá

netscape

Excelente!!, estoy esperando con ansias la siguiente parte ;).

Saludos!!

zhynar_X

Que casualidad, hoy mismo queria empezar a aprender perl.

Espero los siguientes capitulos!


Saludos!
Me he creado un blog:
http://zhynar.blogspot.com  Aver si os gusta! ;)


Optimista es aquel que cree poder resolver un atasco de trafico tocando el claxon (Anonimo)

~[uNd3rc0d3]~

para programar en windows.....descargo el activeperl

luego programo comun en el blog de notas guardo el archivo con extensión .pl

y me queda un archivo con un icono de una iguana (activeperl)

pero cuando apreto el icono abre el ms-dos y lo cierra en menos de un segundo  :huh:

como hago para que leea el script??

leete las reglas asi todos estamos mejor ;)

WHK

Cuando instalas active perl este por defecto devería quedar en c:\perl\perl.exe por lo cual Debes ejecutar ese programa en tu ventana de DOS y seguido el script, por ejemplo... abres el DOS, escribes: c:\perl\perl.exe " dejas un espacio en blanco y arrastras tu script hasta dentro de la ventana del DOS y le das enter.
Me dices si te funciona.

~[uNd3rc0d3]~

cuando ejecuto el icono me sale en el ms-dos muchas lines que dicen

use of uninitialized value in concatenation (.) or string at c:\documents and settings\usuario\escritorio\hola.pl line 14

y despues se ejecuta lo que yo le digo

ej:

use of uninitialized value in concatenation (.) or string at c:\documents and settings\usuario\escritorio\hola.pl line 14

use of uninitialized value in concatenation (.) or string at c:\documents and settings\usuario\escritorio\hola.pl line 14

use of uninitialized value in concatenation (.) or string at c:\documents and settings\usuario\escritorio\hola.pl line 14

use of uninitialized value in concatenation (.) or string at c:\documents and settings\usuario\escritorio\hola.pl line 14

use of uninitialized value in concatenation (.) or string at c:\documents and settings\usuario\escritorio\hola.pl line 14

use of uninitialized value in concatenation (.) or string at c:\documents and settings\usuario\escritorio\hola.pl line 14
1
2
3
4
5
6
7
8
9
10
11
12
...
100


eso seria lo que me pone cuando yo escribo esto

#!/usr/bin/perl -w
#test3.pl

my $cuenta = 1;

#-------------------------------------------------------------------------------------------------
print "Escribiremos desde 000 hasta 100\n";
for $i ( "000" .. "100" ) {
print "$i\n";
}
#-------------------------------------------------------------------------------------------------
print "Escribiremos 100 más, pero con while:\n";
while ( $cuenta <= 100 ) {
print "$i\n";
$cuenta++;
}
#-------------------------------------------------------------------------------------------------
print "Fijate que si no le pongo comillas no tomará los ceros al comienzo:\n";
for $i ( 000 .. 100 ) {
print "$i\n";
}
#-------------------------------------------------------------------------------------------------
exit(0);


lo que no entiendo es que gano con este lenguaje??

se que se usa mucho como exploit pero no entendocual es el uso que se le da habitualmente

desde ya el manual esta muy bien  ::)

leete las reglas asi todos estamos mejor ;)

WHK

#6
Reemplaza
#!/usr/bin/perl -w
por
#! c:\perl\perl.exe

y prueba otraves.

Lo que ganas programando en este lenguaje es que es muy fácil de aprender y funciona en casi todo tipo de plataforma, por ejemplo un bat no puedes ejecutarlo en linux y un .bin tampoco puedes ejecutarlo en windows asi que haces un perl, fácil, práctico y de rápida creación, además en linux viene perl por defecto asi que es muy usado, los peros llegan cuando lo usas en windows :P aunque igual pueden adaptarse para que funcionen en ambos kernels (windows y linux).
También te ahorras compilarlo ya que es interpretado por perl :P asi que un mismo script puedes sarselo a un usuario de linux o windows.

WHK

Ya vi que fue error de mi parte:

Código (perl) [Seleccionar]
#!/usr/bin/perl -w
#test3.pl

my $cuenta = 1;

#-------------------------------------------------------------------------------------------------
print "Escribiremos desde 000 hasta 100\n";
for $i ( "000" .. "100" ) {
print "$i\n";
}
#-------------------------------------------------------------------------------------------------
print "Escribiremos 100 más, pero con while:\n";
while ( $cuenta <= 100 ) {
print "$cuenta\n";
$cuenta++;
}
#-------------------------------------------------------------------------------------------------
print "Fijate que si no le pongo comillas no tomará los ceros al comienzo:\n";
for $i ( 000 .. 100 ) {
print "$i\n";
}
#-------------------------------------------------------------------------------------------------
exit(0);


Reemplazas:
print "Escribiremos 100 más, pero con while:\n";
while ( $cuenta <= 100 ) {
print "$i\n";
$cuenta++;
}


Por:
print "Escribiremos 100 más, pero con while:\n";
while ( $cuenta <= 100 ) {
print "$cuenta\n";
$cuenta++;
}


La diferencia está en print "$cuenta\n"; ya que le había puesto $i devido a la costumbre de usar for en ves de while :P

~[uNd3rc0d3]~

ok muchas gracis WHK a mi pronto me llegan los cd's de ubuntu asi que voy a dejar windowsss

leete las reglas asi todos estamos mejor ;)

Axus

Bueno disculpen la molestia pero tengo una duda primero que nada es S.O que utilizo es kubuntu pero quiero saber expecificamente como se llama el programa que se utiliza para interpretar el code?

Saludos espero su respuesta$