Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al...

25
Introducción PERL. Universidad de Zaragoza Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL Windows ActivePerl http://www.activestate.com/ UNIX perl version 5.005_03 http://www.perl.com/ http://www.cpan.org/ports/win32 http://www.cpan.org/modules/index.h tml http://www.cpan.org/scripts/ index.html Grupo ejemplos Acceso a Bases de Datos Funciones específicas Autenticación LDAP Comunicación TCP/IP Módulo Web Borja Pérez Oñate Area de Sistemas - SICUZ [email protected] 27.03.2003

Transcript of Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al...

Page 1: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Introducción al PERL

Windows ActivePerl http://www.activestate.com/

UNIX perl version 5.005_03http://www.perl.com/

http://www.cpan.org/ports/win32 http://www.cpan.org/modules/index.htmlhttp://www.cpan.org/scripts/index.html

Grupo ejemplos

Acceso a Bases de Datos

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Borja Pérez OñateArea de Sistemas -

[email protected]

27.03.2003

Page 2: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

2Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Variables normales:$v = “5“;$b = $v *3;print $b; >15$c = “$b es más que“ . $v;Print $c; >15 es mas que 5

Listas:@lista=(“5“, “luis“, “34hry“);print @lista[1]; >luis

Operaciones con listas:$elemento=pop(@lista) # saca el últimopush(@lista,$elemento) # añade al final$elemento=shift(@lista) # saca el primerounshift(@lista,$ele) # añade al principio@lista1=sort(@lista2)@lista3=reverse(@lista2)

Operaciones con strings:Substr($string,despl,ncarac);lc($str) (minúsculas) uc($str) (mayúsculas)chop($string)

Page 3: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

3Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Listas asociativas:%lista_asoc = (‘nom‘,‘Pedro‘,ap‘,Perez‘) ;$lista_asoc{‘telef‘} = “ 1234567“;print $lista_asoc{‘nom‘} >Pedro

Manejo de listas asociativas@lista=keys %lista_asoc

@lista=values %lista_asoc

($clave,$valor)=each(%lista_asoc)

delete $lista_asoc{$clave};

Nombres variables de variables:$perico=“memoria“;

$$perico=5;

print $memoria; >5

@$nombre_de_lista;

%$nombre_lista_asoc;

Page 4: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

4Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

For:For ($i=0;$i<100;$i++){ .... }

While:while ($pepe < 7){ ... }

If:if ($nombre eq “juan“){ ... }

==, <, > <>, <=, >=, ne, ...

Foreach:Foreach $elemento (@lista){ ... }

Foreach $clave (keys %lista_asoc){ ... }

Foreach $clave_ord (sort keys %la){ ... }

Page 5: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

5Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Abrir y cerrar:open (F,“nombre_fichero“);

open (F,“>nombre_fichero“);

close(F);

Leer líneas del fichero:while ($linea = <F>){ ... }

while (<F>){ ... } $linea = $_;

@lineas = <F>;

Escribir en fichero:print F “hola“;

Entrada estandar:$resp=<STDIN>;

chop($linea);

Page 6: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

6Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Expresiones regularesPatrones en cadenas de caracteres.

\d buscara un dígito

\s espacio blanco o tabulador

. Cualquier cosa

Modificadores:• * 0 o más• + 1 o más• {n,m} >=n y <=m veces

Buscar líneas que contengan:

Mar 25 08:22:02 add login:

/.*\d\d:\d\d:\d\d.*login/

Page 7: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

7Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Correspondencia:m/lo_que_busca/; sobra la m si //

if ($linea =~ /#/){ ... }

if (!/^#/){ ... } usando $_

Sustitución:s/lo_que_busca/lo_que_pone/flags;

Quitar blancos:$linea =~ s/\s{2,}//g;

Cambiar una palabra por otra:s/perro/gato/g; actua sobre $_

Eliminar las mayúsculas$linea =~ s/[A-Z]//g;

Page 8: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

8Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Split: Divide una cadena de caracteres usando un patrón.

$frase=“hola,Juan“;($uno,$dos)=split(/,/,$frase);

$argumentos=“n=pp&a=jm&ci=0“;@campos=split(/&/,$argumentos);Foreach $un_campo(@campos){ ($clave,$valor)=split(/=/,$un_campo); print “$clave = $valor\n“;}

While(<PASSWD>){@datos=split(/:/);print @datos[1];

}

Page 9: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

9Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Fecha y hora:($sec,$min,$hora,$diames,$mes,$anno,$diasem,$diaanno,$verano)

= localtime(time);

El año desde 1900 (hay que sumar 1900)El mes entre 0 y 11 (hay que sumar 1)Dia semana 0-6 (domingo-lunes)

Generar desde una fecha el tiempo del sistema:

$tiempo=timelocal($sec,$min,$hora,$diames,$mes,$anno);

Encontrar los días, horas, minutos y segundos entre dos fechas:

($s,$m,$h,$d)=(localtime($timenuevo-$timeviejo)[0..2,7];

Page 10: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

10Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Utilidad cp (copy):

#!/usr/local/bin/perl

open (E,“ficheroE“);

open (S,“>ficheroS“);

while ($linea = <E>)

{

print S $linea;

}

close(E);

close(S);

Page 11: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

11Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Quitar los comentarios:

#!/usr/local/bin/perl

open (E,“ficheroE“);

open (S,“>ficheroS“);

while (<E>)

{

if (! /^#/ ){

print S $_;

}

close(E);

close(S);

Page 12: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

12Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

>cs.pl >7334

# du -ks /export/home/*

8 /export/home/AsigADD.txt

0 /export/home/altas

3 /export/home/bep

7334 /export/home/diferencias

0 /export/home/error_add

8 /export/home/g9

0 /export/home/prysma.err

3448 /export/home/prysma.lis

Comandos del sistema:

#!/usr/local/bin/perlforeach (`du -ks /export/home/*`){ s/\s+/ /g; if(s/(\d+) .*diferencias/$1/){ print "$_\n"; }}

($k,$n)=split(/ /);

if ($n =~ /diferencias/){print “$k\n“;}

Page 13: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

13Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Contar palabras:

#!/usr/bin/perl

$fich="/export/home/prysma.lis";open(F,$fich);while(<F>){ s/\s+/ /g; @pdl=split(/ /); foreach $up (@pdl){ $npal{$up}++;

}}foreach $p (sort keys %npal){ print "$p sale $npal{$p} veces\n";}

s/[;|,|:]//g;

Page 14: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

14Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Fichero de configuración:

#!/usr/bin/perl

open (CNF,”conf)|| die “Error al abrir conf\n";while (<CNF>){ if (! /^#/){ chop;

if (s/^PORT://){$PORT=$_;}if (s/^servidorLDAP://){$servLDAP=$_;}if (s/^rootdc://){$rootdc=$_;}

}}

#

# Caracteristicas del servidor LDAP

PORT:386

servidorLDAP:linpps.unizar.es

rootdc:dc=personal,dc=unizar,dc=es

Page 15: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

15Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Página web dinámica:

print "Content-type: text/html\n\n";

open (F,”plantilla);

while (<F>){

s/#CAMPO1#/$valor1/g;

s/#CAMPO2#/$valor2/g;

....

print $_;

}

close(F);

Page 16: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

16Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Envío de mail:

......

&enviamail($mensaje);

.......

exit;

sub enviamail{

my @men=@_;

my $to=“borja\@unizar.es”;

open (MAIL,"| /bin/mail -s \"Resultado\“ $to");

print MAIL "@men\n";

close(MAIL);

}

Page 17: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

17Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Bases de Datos:Módulos sobre DB:

$dbh = DBI->connect(

"dbi:Oracle:$inst", $user, $pass,

{ AutoCommit => 0, RaiseError => 1, PrintError => 0 }

)

or die $DBI::errstr;

Page 18: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

18Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Bases de Datos:use DBI();

$dbh = DBI->connect(

"DBI:mysql:database=webct;host=localhost",

“usuario", “password",

{'RaiseError' => 1}

);

$sqlcomand="delete from conteos";

$sth = $dbh->prepare($sqlcomand);

$sth->execute();

$sqlcomand="select count(distinct cod_alum) from parejas";

$sth = $dbh->prepare($sqlcomand);

$sth->execute();

($total_alumnos)= $sth->fetchrow_array;

Page 19: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

19Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Bases de Datos:use DBI();

$dbh = DBI->connect(

"DBI:mysql:database=webct;host=localhost",

“usuario", “password",

{'RaiseError' => 1}

);

$sc="select distinct centro from conteos order by centro";

$sth = $dbh->prepare($sc);

$sth->execute();

while (($codigo_centro)= $sth->fetchrow_array) {

$sc="select centro titulacion from conteos where centro > 100";

$sth = $dbh->prepare($sc);

$sth->execute();

while (($codigo_centro,$cod_titu)= $sth->fetchrow_array) {

Page 20: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

20Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Autenticación LDAP:

$result=$ldap->bind(dn=> $dn,password=> $password);

if ( $result->code){

print "no se ha autenticado\n";

exit;

}

print " OK\n";

#!/usr/bin/perl

use Net::LDAP;

$base = "ou=accounts,dc=unizar,dc=es";

$username="borja";

$password=“fgdew34";

$ldap = new Net::LDAP ("linpps.unizar.es", port=> 389);

$ldap->bind();

$mesg = $ldap->search(

base => $base,

filter => "(&(uid=$username))",

attrs => "dn"

);

$entry = $mesg->pop_entry();

$dn = $entry->dn();

Page 21: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

21Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

TCP/IP servidor (demonio):

#!/usr/bin/perl

use IO::Socket;

$PORT=2000;

$server = IO::Socket::INET->new( Proto => 'tcp',

LocalPort => $PORT,

Listen => SOMAXCONN,

Reuse => 1);

die “No puedo configurar el servidor" unless $server;

while ($client = $server->accept()) {

$client->autoflush(1);

while ( <$client>) {

if (/quit|exit/i) { last; }

print “$_”;

print $client $_; #modo eco

}

close $client;

}

Page 22: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

22Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

TCP/IP cliente:

#!/usr/bin/perl

use IO::Socket;

open (F,">$fichero");

$host = "www.sophos.com";

$EOL = "\015\012";

$BLANK = $EOL x 2;

$remote = IO::Socket::INET->new( Proto => "tcp",

PeerAddr => $host,

PeerPort => "http(80)",

);

unless ($remote) { die “no puedo conectar con $host" };

$remote->autoflush(1);

print $remote "GET /downloads/ide/".$version."_ides.zip HTTP/1.0" . $BLANK;

while ($respuesta=<$remote>) {

print F $respuesta;

}

close (F);

close $remote;

Page 23: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

23Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

Módulo Web:

#!/usr/bin/perl

use CGI;

$query = new CGI;

$anno=$query->param('anno');$direccion=$query->param('direccion');

@nombres = $query->param

use CGI; $q = new CGI; print $q->header,

$q->start_html('hello world'), $q->h1('hello world'), $q->end_html;

print "Content-type: text/html\n\n";

Page 24: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

24Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

NO a laGUERRA

NO a laGUERRA

NO a laGUERR

A

NO a laGUERR

ANO a laGUERR

A

NO a laGUERR

A

NO a laGUERR

A

NO a laGUERR

ANO a laGUERR

A

NO a laGUERR

A

Page 25: Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al PERL WindowsActivePerl  UNIXperl.

25Introducción PERL. Universidad de ZaragozaIntroducción PERL. Universidad de Zaragoza

Variables

Control de flujo

Ficheros

Grupo de ejemplos

Acceso a B.D.

Funciones específicas

Autenticación LDAP

Comunicación TCP/IP

Módulo Web

use Win32::OLE;

$ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})

or die "Oops, cannot start Excel";

}

# get a new workbook

$book = $ex->Workbooks->Add;

# write to a particular cell

$sheet = $book->Worksheets(1);

$sheet->Cells(1,1)->{Value} = "foo";

# write a 2 rows by 3 columns range

$sheet->Range("A8:C9")->{Value} = [[ undef, 'Xyzzy', 'Plugh' ],

[ 42, 'Perl', 3.1415 ]];

# print "XyzzyPerl"

$array = $sheet->Range("A8:C9")->{Value};

for (@$array) {

for (@$_) {

print defined($_) ? "$_|" : "<undef>|";

}

print "\n";

)

# save and exit

$book->SaveAs( 'test.xls' );

undef $book;

undef $ex;