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/
-
Macintosh www.macperl.com
-
Windows 9x/NT
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
-
Définition sous Fonctions
sub mafonction{
$_[0]; # premier argument @_; # tableau d ’argument..
return $var; return $var1,var2; }
$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
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