Historique et présentation
- Pratical Extration and Report Language, Larry Wall
- Langage interpreté
- Utilité : petits scripts, prototypage d'applications, scripts
CGI
- Avantages :
-
- Déveleppement simple, rapide, facile à débuguer
- Portage sur toutes les plateformes : tous UNIX et NT
- Nombreuses librairies disponibles
- Inconvénients : langage interprété donc :
-
- Pas de binaire (sauf...),
- Temps nécessaire à l'interprétation non négligeable
- Des opérations très simples peuvent être infiniment plus
longues que leur équivalents C
- Les règles de programmation ne sont pas assez strictes
Installation et lancement
- La dernière version est la 5.004_04
- Traditionnellement il se trouve dans /usr/local/bin
(linux)
-
- ... et à l'ESSI dans /opt/LWperl/bin
- Les modules (librairies ) se trouvent traditionnellement dans
/usr/local/lib/perl5
-
- à l'ESSI dans /opt/LWperl/lib
Les différents modes d'exécution (1)
Les différents modes d'exécution (2)
Les différents modes d'execution (3)
- Options d'exécution utiles :
-
- -c : check : vérifie la syntaxe
- -w : warning : exécute avec des avertissements
- -V : imprime la version et les paramètres d'installation
Structure d'un programme, exemple
> cat exemple.pl
#!/usr/loca/bin/perl
#les dièses servent à commenter une ligne
#une routine
sub ma_routine
{
($arg1,$arg2)=@_;
print "argument 1 : $arg1\n";
print "argument 2 : $arg2\n";
if ($arg1 == $arg2)
{
print "les argumuments sont egaux\n";
}
else
{
print "les argumuments sont differents\n";
}
}
#le programme principal
$argument_1 = @ARGV[0];
$argument_2 = @ARGV[1];
ma_routine($argument_1, $argument_2);
>
Documentation interne
- Pour avoir des infos en ligne taper :
-
>perldoc perl
- ...ou encore
-
>perldoc perlrun
- ...et plus généralement on peut avoir des infos sur chaque
module
-
>perldoc CGI
Sources d'information externes
- Bibliographie conseillée
-
- Les "Camels" books d'O' Reilly & Associates
- CGI/Perl et Javascript, Isaac Cohen, Eyrolles
- ...
Les types en PERL : le type scalaire
- Un scalaire peut être un entier, un flottant, un caractère, une
chaîne de caractères , un pointeur ...
- Notation :
$un_car='c';
$une_chaine="chaine"
$un_entier=1;
$un_flotant=3.14;
Quel que soit le type abstrait qu'il représente, le scalaire est
codé sur 32 bits. Cela entraîne une augmentation de la mémoire
nécessaire et ralentit les temps de manipulation. En revanche cela
permet d'avoir des règles de conversion contextuelles.
$chaine = "1+1=" . (1+1)
#chaine vaut : "1+1=2", . est l'opérateur de
concaténantion
Les types en PERL : le type liste
Une liste est un tableau de scalaires.
- Notation : @list
-
- @list=("chien","chat",'a',3.14,0);
- Pour accéder aux éléments un par un :
-
- Pour ajouter en fin de liste
-
- push(@list,"dernier element)
- Pour ajouter en début de liste
-
- unshif(@list,"premier element);
- Pour obtenir le dernier élément
-
- Pour obtenir le premier
-
- Le nombre d'éléments :
-
- Essayez cet exemple !
Les types en PERL : le type table de hâchage
Notation : %hash
$hash{"cle"}="valeur";
$hash{"toto"}=1;
@list_key = keys %hash
$nb_elem = scalar @list_key
Les routines
Notation :
-
sub ma_fonction
{
($arg1,$arg2)=@_;
...
return $result;
}
$resultat=ma_fonction($parametre1,$parametre2);
- @_ représente un liste de paramètres
- On peut déclarer des procédures internes à d'autres
procédures
Les arguments
- @_ : liste de paramètres
- $_ : premier élément de la pile
- $$ : pid
if, for, foreach ...
foreach $variable (@list)
{
print $variable;
}
Les expressions régulières
- Supression : usage : $mot = ~ s/toto/titi/ : remplace
toto par titi
- "match" usage : ($mots =~ m/toto/) teste si mot
contient toto
- Caractères spéciaux :
-
- . tout caractère
- * tout caractère n fois
- ^ début de ligne
- $ fin de ligne
- \s : espace
- ...
Les modules
- Pour charger un module : use MODULE , en début de
code
- Modules utiles : CGI, BD, DBM,...
Exercice : écrire un petit script qui compte
le nombre de pages vues à partir des access_log de Apache et en
fait un classement.
Présentation du module CGI de perl
Script minimal
Gestion de formulaires
Contrôle des headers et push
Gestion des cookies
Stockage de fichiers