Introduction à Perl
(Pratical Extraction and Report language)
(pathologically Eclectic Rubbish Lister)
 
Historique
Caractéristiques
Installation
Début d ’un programme
Variables
Structures de contrôle
Expressions Rationnelles
Gestion Fichiers
Appel système
Orienté Objet
Le cgi
Un exemple de socket
Bibliographie



Download ppt

Historique
En 1987, Larry Wall créé un logiciel réutilisable pour débuguer des programmes.
Il met se logiciel à disposition pour les programmeurs  connecté à Usenet. Son logiciel fait un tabac.
Vue l'engouement générale, il décide de l'enrichir. C'est de là que vient Perl.
La syntaxe de Perl est inspiré de Awk, sed, sh et C. Aujourd'hui, Perl en est à la version 5.
Les différents slogans de Perl résume bien ses capacités:
 *Perl est un langage naturel Ceci signifie que la grammaire ou syntaxe de Perl est très riche et aussi très complexe.
Mais si on connaît un peu la grammaire on peut arrivé à s'exprimer.
*Avec Perl, il y a plus d’une façon de le faire (TIM-toady)
Ceci veut dire qu'un programme peut être construit d'une infinité de manière différentes.
*Perl rend le travail simple, facile et le travail difficile possible.
*Perl est le couteau suisse des chaînes, ceci signifie que Perl à beaucoup de fonction facilitant le traitement des chaînes.


Caractéristiques

* Rapide/efficace pour programmer
Une fois qu'on maîtrise la programmation on peut faire des choses qu'on aurait fait en 50 ligne sous C en 10 lignes sous Perl.
* Grand nombre de possibilités
Perl possède un très grand nombre de librairies qui lui donnes un nombre infini de possibilité.
* Portable
Perl est supporté par quasiment toutes les plates formes.(Voir installation) *Difficilement réutilisable
Un programme codé en Perl  par un expert est difficilement compréhensible.
Il est souvent plus simple de recodé le programme.
* Il s’écrit en un unique fichier
A part dans une approche objet, Perl s'écrit en un seul fichier.
* Lent à l’exécution
Avant chaque exécution, Perl compile le programme et l'exécute.
Ceci ralentis l'exécution.
                                                                                                                                       TOP


Installation
lien Debian version 2.1 RedHat version 6.0
Slackware version 2.5 SuSE version 6.0 par défaut sur: Aix 4.3.3. Solaris 8  IRIX
pour HPUX  SCO :  source www.perl.com/CPAN-local/src/5.0/ Il faut téléchargé un exécutable sur activestate.
www.activestate.com/download/ActivePerl/Windows/5.6/


Début d ’un programme
Un programme Perl commence toujours par un ligne commençant par #! suivit de la position de l'exécutable Perl et des options de compilation:

Exemple sur Linux avec l'option warning (-W)
#!usr/bin/Perl - w
Exemple sur Windows avec l'option debug (-d)
#!c:/Perl/bin/Perl -d
 Les lignes suivantes sont les librairies utilisées, une librairie est appelé par le mot "use".
Exemples de librairies:
Use CGI;   : librairie pour accès web
Use SQL;   : librairie pour accéder à une base SQL
Use Socket;: librairie égal socket.h en C

                                                                                                                     TOP

Variables
Les variables scalaires en Perl ne sont pas typées. elles sont "undifined" ou "defined" mais elles peuvent être successivement  des entiers, des nombres réel et  des chaînes de caractères. Toutes les variables scalaires commencent par le caractère $.
Exemple:
$variable=« Hello World »;
$variable=25;
Un tableau en perl commencent toujours par le caractère '@'. Comme les variables ne sont pas typé, un tableau peut posséder des variables des différents type.  la longueur du tableau est $#nomdutableau.
Exemple:
@Tab=("bonjour" ,"pierre",1,2);
le tableau Tab contient bonjour à la position 0. Pierre à la position 1, 1 à la position 2, 2 à la position3.
$#tab ==3;
la taille de Tab est 3.
$Tab[ 0] est la valeur de l'index 0 soit "Boujour".

Les tables de hashage en Perl commence par%.
exemple %tabhash:
%tabhash{$var}=@tab;

                                                                                                                                   TOP



Structures de contrôle La condition if en Perl est la même qu'en C.  If ( expression ){}else{}
La condition if inversé si ce n'est pas vrai .unless ( expression ){}
affectation de true val ou falseval à val suivant l'expression. $val=(expression  ?  truevalue  :  falsevalue); La boucle do,  for et while  en Perl est la même qu'en C: do{}while/until (expression )
for{exp_initiale;test_exp;increm_exp }()
while(test_exp)()
La boucle foreach permet de faire une action sur chaque valeur d'un tableau:
foreach $i (@liste){} On peut faire des branchements en Perl:
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; }}

                                                                                                                 TOP



Expressions Rationnelles
Les expressions rationnelles permettent de trouver des motifs dans une chaîne de caractère.  .   permet de reconnaître n ’importe quel lettre sauf \n\s   Inversement \S permet de reconnaître les caractères qui ne sont pas des  espaces
.
\d  : permet de reconnaître les chiffres [0-9] l' inverse est  \D
[ ...] :permet de reconnaître tout les caractères du crochet.
[^ ...] :permet de reconnaître tout les caractères qui ne sont pas dans le crochet .
Ancrage
^   :  permet de reconnaître un motif en début de ligne.
Alternatif : "|" correspond à un ou. * , reconnaît 0 ou n fois  le motif précédent,
+ , reconnaît 1 ou n fois le motif précédent
?, reconnaît  0 ou 1 fois le motif précédent
/i   : ignorer la case . /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.

                                                                                                                                   TOP



Gestion Fichiers STDIN entrée standard STDOUT sortie standard
  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.
  close (DES); ferme le descripteur de fichier

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;
close FILEW;
}



Appel système System(« programme »); C'est une fonction qui permet d'exécuter des commandes systèmes, seulement la sortie se fait sous  <STDIN>
`programme` ceci permet d'exécuter une fonction système  la sortie chaîne de caractère
open(DESCRI ,«|programme |»);  permet de rentrer des données en entrée du programme ou utiliser la sortie du pipe comme un descripteur de fichier,  La sortie ou l'entrée du programme est vu comme un fichier. fork(); exec(); Les même fonctions qu'en C.
wait(); waitpid();

exemple: recopie de l'exécution de who vers lpr
#!/usr/bin/perl
open(LPR,« |lpr »);
@mywho=`who`;
foreach $_ (@mywho){ print LPR $_; }
close LPR;

                                                                                                                                  TOP



Fonctions sub mafonction{
$_[0]; # premier argument @_; # tableau d ’argument..
return $var;     return $var1,var2; } $var / @tab = mafonction($first, $second);
&myfunc (@list); Contournement my($variable_locale);

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
                                                                                                                           TOP



Orienté Objet
Le concept de classe sous Perl est appelé Package
Pour créer un objet on fait:
$obj=new Objet;
pour accéder à un attribut de l'objet
$obj -> référence;
pour accéder à une fonction de l'objet
$obj -> fonction(param,param2);
 

exemple
Dans le fichier "class"
Package Personne;
my %champs=(nom=>undef,age=>undef,enfants=>undef);

Dans le programme utilisant la classe:
use Personne;
$lui=new Personne;
$lui->nom("Dupont");
$lui->age(30);
$lui->enfants(["lucie","pierre"];
                                                                                                  TOP



Le cgi
tutorial
tutorial2
 
fonction perl code HTML généré
header();  <HEAD>
start_html(); <HTML>
h1('some','contents');  <H1>some contents</H1>
h1({-align=>left},'contents');  <H1 ALIGN="LEFT">contents</H1>
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>

 

Un exemple cgi

print  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;
                                                                                                   TOP



Un exemple de socket
Librairie Socket #!/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; #!/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



Conclusions
"Perl permet la paresse l’impatience et la démesure" "Perl promotes laziness, impatience, and hubriss."
                                                                                                      TOP


Bibliographie

Livres:
Introduction à Perl, RL.Schwartz & T.Christiansem, O ’reilly
"Programming Perl,L.Walls & RL.Schwartz         O ’reilly

Sites:

 "Picking up Perl » www.ebb.org

www.perl.org
www.activestate.com
Bon résumé des différentes commandes:
resume

english tutorials

                                                                                                TOP