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 -
27.03.2003
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)
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;
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){ ... }
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);
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/
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;
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];
}
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];
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);
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);
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“;}
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;
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
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);
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);
}
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;
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;
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) {
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();
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;
}
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;
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";
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
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;