Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al...
-
Upload
purificacion-mendez-lagos -
Category
Documents
-
view
212 -
download
0
Transcript of Introducción PERL. Universidad de Zaragoza Variables Control de flujo Ficheros Introducción al...
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;