per lameliorer
TRANSCRIPT
Introduction à Perl(Pratical Extraction and Report language)
(pathologically Eclectic Rubbish Lister)
Mohamed Bouhamed
Sommaire
Historique / Caractéristiques
Installation / Début d ’un programme
Variables / Structures de contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système
Fonctions
Orienté Objet
Un exemple de CGI
Un exemple de socket
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Historique
En 1987, 1ere version par Larry Wall.
Inspiré de Awk, sed, sh, C.
langage naturelle.
Il y a plus d’une façon de le faire.TIM-toady.
Perl rend le travail simple, facile et le travail
difficile possible.
Le couteau suisse des chaînes.
Aujourd’hui Version 5.
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Caractéristiques
Points positifs:
Rapide/efficace pour programmer
Grand nombre de possibilités
Portable
Points négatifs:
difficilement réutilisable
s’écrit en un unique fichier
Lent à l’exécution
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Installation
Linux par défaut sur: Debian version 2.1 RedHat version 6.0
Slackware version 2.5 SuSE version 6.0
Unix par défaut sur: Aix 4.3.3. Solaris 8 IRIX
pour HPUX SCO : source (www.perl.com/CPAN-local/src/5.0/)
Macintosh www.macperl.com
Windows 9x/NTwww.activestate.com/download/ActivePerl/Windows/5.6/
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Début d ’un programme
Options de compilation: #!usr/bin/Perl - w : warning
#!c:/Perl/bin/Perl - d : debug
Librairies comme #include
Use CGI;
CGI : librairie pour accès web
SQL : librairie pour accéder à une base SQL
Socket: égal socket.h
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Variables
variable scalaire
$variable
$variable=« Hello World »;
$variable=25;
Tableau
@tab
$tab[0]: Valeur 0eme de @tab.
table de hashage.
%tabhash
%tabhash{$var}=@tab;
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Structures de contrôle
Conditions
If ( expression ){}else{}
Unless ( expression ){}
$val=(expression ? truevalue : falsevalue);
boucles
do{}while/until (expression )
For{exp_initiale;test_exp;increm_exp }()
while(test_exp)()
foreach $i (@liste){}
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Contrôle spéciaux
last :
branchement après la boucle
While(exp 1){ if( exp2 ){ last; }} #saut last ici
next:
branchement en fin de boucle.
While(exp 1){ if( exp2 ){ next; } truc; #saut next ici}
redo:
branchement en début de boucle
While(exp 1){#saut redo ici truc;if( exp2 ){redo; }}
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Expressions Rationnelles
Motifs
. n ’importe quel lettre sauf \n.
\s caractères espace [ \n\t\n\f] | inverse \S
\w : caractères de mots [a-zA-Z0-9] | inverse \W
\d : chiffres [0-9] | inverse \D
/i : ignorer la case.
[^ ...] : négation des caractères du crochet.
Ancrage
^ : correspond au début de ligne.
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Expressions Rationnelles
(bis)
Alternatif : "|" correspond à un ou.
Multiplicatif
* , 0 ou n fois + , 1 ou n fois ?, 0 ou 1 fois le
Utilisations /pattern/option
if ( $a =~ /^bon/ i) vrai si $a commence par bon ou Bon
s/pattern/replace/option
$wi= ~ s/y/x/g : remplace toute les y dans wi par x.
Split
@tab= split(/:/,$v) : coupe la chaîne $v suivant le
délimiteur « : » et le stocke dans tab.
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Gestion Fichiers
Descripteurs
STDIN entrée standard STDOUT sortie standard
Fonction open
open(FILEH, « monfichier »); mon fichier est ouvert en
lecture.
open(FILEW, « >monfichier »); mon fichier est ouvert en
écriture.
open(FILEW, « >>monfichier »); mon fichier est ouvert en
écriture et créé en mode append.
Fonction close
close (DES); ferme le descripteur de fichier
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Gestion Fichiers
exemple: copie du fichier toto dans titi.
print "Voulez vous copier toto dans titi:";
if(<STDIN>=~ /(yes|oui)/i)
{
open(FILEW, ">>titi");
open(FILER, "toto");
while ($a=<FILER>)
{print FILEW "ligne de toto $a";}
close FILER;
close FILEW;
}
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Appel système Exécution de programme
System(« programme »); sortie <STDIN>
`programme` sortie chaîne de caractère
open(DESCRI ,«|programme |»); entrée ou sortie pipe
Gestion de processus
fork(); exec();
wait(); waitpid();
exemple:#!/usr/bin/perl
open(LPR,« |lpr »);
@mywho=`who`;
foreach $_ (@mywho){ print LPR $_; }
close LPR;
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Fonctions
Définition sous Fonctions sub mafonction{
$_[0]; # premier argument @_; # tableau d ’argument
...
return $var; return $var1,var2; }
Appel Sous Fonction $var / @tab = mafonction($first, $second);
&myfunc (@list);
Toutes les variables sont globales.
Contournement my($variable_locale);
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Fonctions (bis)
exemple: #!c:/perl/bin/perl -w
$a=1; $b=2;
$c=sum();
print " valeur de sum : $c \n valeur de a: $a \n";
sub sum{
my($a)=10;
return $a+$b; }
Résultat: valeur de sum : 12
valeur de a: 1
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Orienté Objet
Classe -> Package Objet -> référence
exemplepackage Personne;
my %champs=(nom=>undef,age=>undef,enfants=>undef);
use Personne;
$lui=new Personne;
$lui->nom("Dupont");
$lui->age(30);
$lui->enfants(["lucie","pierre"];
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Le cgi Header
header(); <HEAD>
start_html(); <HTML>
h1('some','contents'); <H1>some contents</H1>
h1({-align=>left},'contents'); <H1ALIGN="LEFT">contents</H1>
Liste
radio_group(); <INPUT TYPE="radio">
popup_menu(); <SELECT NAME="toto" >
checkbox(); <INPUT TYPE="checkbox">
textarea(); <INPUT TYPE="text" >
scrolling_list( -name=> ’toto', -Values=>[England,France,] ,
-Labels=>{England=>"EN",France=>"FR",} , -size=>1, -multiple=>0);
<SELECT NAME="toto" SIZE=1> <OPTION VALUE="England">EN
<OPTION VALUE="France">FR</SELECT>
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Un exemple cgi
Print Hello world
#!/usr/local/bin/perluse CGI; # load CGI routines
$q = new CGI; # create new CGI object
print $q->header, # create the HTTP header
$q->start_html('hello world'),
# start the HTML
$q->h1('hello world'), # level 1 header
$q->end_html; # end the HTML
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Un exemple cgi
#!C:\PERL\bin\perl.exe
use CGI ':standard';
$query = new CGI;
print $query->header;
print $query->start_html("Example CGI.pm Form");
print $query->h1('A Simple Example');
print $query-> start_form;
print "What's your name? ";
print $query-> textfield('name'),p;
print "What's the combination?",p;
print $query-> checkbox_group(-name=>'words',
-values=>['key1','key2','key3','key4'],
-defaults=>['key1','key3']);
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Un exemple cgiprint p,"What's your favorite color? ";
print popup_menu(-name=>'color',
-values=>['red','green','blue','chartreuse']),p;
print $query->submit('Action','Send');
print $query->endform;
print hr;
if (param()) {
print "Your name is: ",em(param('name')),p,
"The keywords are: ",em(join(", ",param('words'))),p,
"Your favorite color is: ",em(param('color')),
hr;
}
print a({href=>'../cgi_docs.html'},'Go to the
documentation');
print end_html;
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Un exemple de socket Librairie Socket
Tcp Client#!/usr/bin/perl -w
use Socket;
$remote='localhost';
$port=8011;
$iaddr=inet_aton($remote);
$paddr=sockaddr_in($port,$iaddr);
$proto=getprotobyname('tcp');
socket(SOCK,PF_INET,SOCK_STREAM,$proto);
connect(SOCK,$paddr);
while($ligne=<SOCK>) { print $ligne; }
close (SOCK);
exit;
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket
Un exemple de socket TCP Serveur#!/usr/bin/perl -w
use Socket;
$port=8011;
$proto=getprotobyname('tcp');
socket(Serveur,PF_INET,SOCK_STREAM,$proto);
setsockopt(Serveur,SOL_SOCKET,SO_REUSEADDR,pack("l",1));
bind(Serveur,sockaddr_in($port,INADDR_ANY));
listen(Serveur,SOMAXCONN);
for(;$paddr=accept(Client,Serveur);close Client)
{ ($portc,$iaddrcl)=sockaddr_in($paddr);
$nom=gethostbyaddr($iaddrcl,AF_INET);
print Client "Salut $nom coucou\n"; }
>>Salut localhost.localdomain coucou
Historique / Caractéristiques
Installation / Début d ’un
programme
Variables / Structures de
contrôle
Contrôle spéciaux
Expressions Rationnelles
Gestion Fichiers
Appel système / Fonctions
Orienté Objet
Exemples de CGI Socket