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.
Le 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 l e
couteau suisse des chaînes, ceci signifie que Perl à beaucoup de
fonction facilitant le traitement des chaînes.
Caractéristiques
Points
positifs:
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 )
Points
négatifs:
difficilement
réutilisable
Un programme codé en Perl par un expert est
difficilement compréhensible. Il est souvent plus simple de
recodé le programme.
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
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/
Il faut
téléchargé un exécutable sur activestate.
Début d ’un
programme
Un
programme Perl commence toujours par un ligne
commençant
par #! suivit d e
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:
U se
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".
L es
tables
de hashage en Perl commence par%.
exemple %tabhash:
%tabhash{$var}=@tab;
TOP
Structures de contrôle
Conditions
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 .u nless
( expression ){}
affectation
de true val ou falseval à val suivant l'expression. $val=(expression
? truevalue
: falsevalue);
boucles
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){}
Contrôles spéciaux
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.
Motifs
.
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.
Multiplicatif
* , 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 .
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.
TOP
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
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
Exécution de programme
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.
Gestion de processus
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
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);
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
n valeur
de a: 1
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
$o bj
-> référence;
pour
accéder à une fonction de l'objet
$o bj
-> 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
Header
n header();
<HEAD>
n start_html(); < HTML>
n h1 ('some','contents'); <H1>some contents</H1>
n h1({-align=>left},'contents');
<H1ALIGN="LEFT">contents</H1>
n Liste
n radio_group();
<INPUT TYPE="radio">
n popup_menu();
<SELECT NAME="toto" >
n checkbox();
<INPUT TYPE="checkbox">
n textarea();
<INPUT TYPE="text" >
n 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>
EN
FR
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
n 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;
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
Conclusions
"Perl
permet la
paresse l’impatience
et
la démes ure. "
Perl promotes laziness,
impatience, and hubriss.
TOP
Bibliographie
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
TOP