Différences entre versions de « Perl »

De Didaquest
Aller à la navigationAller à la recherche
 
(25 versions intermédiaires par le même utilisateur non affichées)
Ligne 57 : Ligne 57 :
 
|Typologie= <!------------------------------------ Ne pas Modifier  -->
 
|Typologie= <!------------------------------------ Ne pas Modifier  -->
 
<!-- ****************** Commercez les modifications ****************-->
 
<!-- ****************** Commercez les modifications ****************-->
*{{@}} <span style="color:purple" >'''Information sur  Perl'''</span>
+
{{@}} <span style="color:purple" >'''Information sur  Perl'''</span>
  
                  <span style="color:blue">'''*Date de première version:'''</span> 1987
+
      <span style="color:blue">'''* Date de première version:'''</span> 18 décembre 1987 .
  
                    <span style="color:blue">'''* Paradigmes:'''</span> Objet, impératif, fonctionnel, réflexif, procédural, événementiel, générique
+
      <span style="color:blue">'''* Paradigmes:'''</span> Objet, impératif, fonctionnel, réflexif, procédural, événementiel, générique
  
                    <span style="color:blue">'''* Auteur''':</span>Larry Wall
+
      <span style="color:blue">'''* Auteur''':</span> Larry Wall
  
                    <span style="color:blue">'''* Développeurs:'''</span> The Perl Foundation
+
      <span style="color:blue">'''* Développeurs:'''</span> The Perl Foundation
 +
 
 +
      <span style="color:blue">'''* Licence:'''</span> Licence artistique 1.0[4][5] ou licence publique générale GNU[6]
 
                      
 
                      
                    <span style="color:blue">'''* Dernière version:'''</span> 5.32.1 (23 janvier 2021)
+
      <span style="color:blue">'''* Dernière version:'''</span> 5.32.1 (23 janvier 2021)
  
                    <span style="color:blue">'''* Système d'exploitation:'''</span> Multiplateforme
+
      <span style="color:blue">'''* Système d'exploitation:'''</span> Multiplateforme
  
                    <span style="color:blue">'''* Typage:'''</span> Faible, dynamique
+
      <span style="color:blue">'''* Typage:'''</span> Faible, dynamique
  
                    <span style="color:blue">'''* Influencé par:'''</span> C, BASIC, Eiffel, shell, sed, awk
+
      <span style="color:blue">'''* Influencé par:'''</span> C, BASIC, Eiffel, shell, sed, awk
  
                    <span style="color:blue">'''* Écrit en:'''</span> C
+
      <span style="color:blue">'''* Écrit en:'''</span> C
  
                    <span style="color:blue">'''* Extensions de noms de fichiers:'''</span> .plx, .pl, .pm, .xs, .t, .pod
+
      <span style="color:blue">'''* Extensions de noms de fichiers:'''</span> .plx, .pl, .pm, .xs, .t, .pod
  
                    <span style="color:blue">'''* site internet:'''</span> www.perl.org
+
      <span style="color:blue">'''* Site internet:'''</span> www.perl.org
* {{@}} <span style="color:purple" > '''Environnement Perl''' </span>
+
 
 +
{{@}} <span style="color:purple" > '''Environnement Perl''' </span>
 
*Pour travailler avec Perl, vous allez avoir besoin de deux programmes : <span style="color: purple">'''un interpréteur Perl'''</span>  et  <span style="color: purple"> '''un éditeur de texte'''</span>.
 
*Pour travailler avec Perl, vous allez avoir besoin de deux programmes : <span style="color: purple">'''un interpréteur Perl'''</span>  et  <span style="color: purple"> '''un éditeur de texte'''</span>.
 
 
*Pour installer l’interpréteur Perl sur votre machine, rendez vous sur http://strawberryperl.com/, puis cliquez sur la version qui correspond à votre ordinateur.  
 
*Pour installer l’interpréteur Perl sur votre machine, rendez vous sur http://strawberryperl.com/, puis cliquez sur la version qui correspond à votre ordinateur.  
 
*Maintenant, pour programmer il faut utiliser un éditeur de texte pour écrire '''le fichier source''' d'un programme écrit en Perl.
 
*Maintenant, pour programmer il faut utiliser un éditeur de texte pour écrire '''le fichier source''' d'un programme écrit en Perl.
Le fichier source d'un programme écrit en Perl est un simple fichier texte dont l'extension est par convention '''.pl.'''
+
  Il en existe plusieurs editeurs comme :*[[Fichier:Gedit.jpeg|80px]] , *[[Fichier:Notepad++.jpeg|150px]]'''Notepad++......
Il en existe un nombre assez conséquent:
+
  * [[Fichier:Gedit.jpeg|80px]]'''gedit''' :simple, possède une coloration syntaxique, suffisant, existe sous Linux
+
*Maintenant que vous avez tous les outils nécessaires pour coder en Perl, nous allons enfin réaliser notre premier programme !  
  *[[Fichier:Notepad++.jpeg|150px]]'''Notepad++''':simple, pour les gens sur Windows sans interface graphique (en ligne de commande sous GNU/Linux ou Unix)
+
 
  *[[Fichier:Vim.jpeg|10]]'''vim''' : très puissant
+
{{@}} <span style="color:purple" >'''votre premier programme'''</span>
  *Maintenant que vous avez tous les outils nécessaires pour coder en Perl, nous allons enfin réaliser notre premier programme ! :
+
  Exemple
*{{@}} <span style="color:purple" >'''votre premier programme'''</span>
 
Exemple
 
'''use strict;
 
  use warnings;
 
  print "Hello, world!";
 
  <>;'''
 
--La première ligne est un commentaire obligatoire qui indique '''l'endroit où les trouve l'interpréteur Perl.'''
 
  
--La deuxième ligne est une commande, qui '''imprimera Hello, world! à l'écran une fois exécuté le programme'''
+
      '''use strict;
 +
      use warnings;
 +
      print "Hello, world!";
 +
      <>;'''
 +
   
 +
      La première ligne est un commentaire obligatoire qui indique '''l'endroit où les trouve l'interpréteur Perl.'''
  
*{{@}} <span style="color:purple" > '''comment exécuter un programme perl'''</span>
+
      La deuxième ligne est une commande, qui '''imprimera Hello, world! à l'écran une fois exécuté le programme'''
  
--Le mettre dans un fichier, par exemple '''Hello.pl'''.
+
{{@}} <span style="color:purple" > '''comment exécuter un programme perl'''</span>
  
--Rendre le fichier exécutable ('''LINUX: chmod u+x premier.pl''').
+
Le mettre dans un fichier, par exemple '''helloworld.pl'''.
  
--Taper le nom du fichier premier
+
Rendre le fichier exécutable ('''LINUX: chmod u+x helloworld.pl''').
[[Fichier:Exec.png]]
+
 
 +
Taper le nom du fichier helloworld.pl
 +
 
 +
    [[Fichier:Exec.png]]
  
 
}}<!-- ******** Fin Fiche Didactique Définition ******************* -->
 
}}<!-- ******** Fin Fiche Didactique Définition ******************* -->
Ligne 176 : Ligne 179 :
 
<!-- Compléter les pointillés et Supprimer les lignes non utilisées          -->
 
<!-- Compléter les pointillés et Supprimer les lignes non utilisées          -->
 
<!-- ****************** Commercez les modifications ***********************  -->
 
<!-- ****************** Commercez les modifications ***********************  -->
 +
{{@}} <span style="color:purple" >'''Syntaxe du langage''' </span>
  
 +
*Perl est dérivé du langage C et a conservé un grand nombre d'éléments de sa syntaxe (syntaxe de la boucle for, bloc délimité par des accolades, point-virgule en fin de ligne, indice des tableaux entre crochet, etc...).
 +
    '''a) Les types de données'''
 +
        Perl est un langage faiblement typé.
 +
        Il existe principalement '''trois structures de données''' : '''les scalaires, les tableaux et les tables de hachage'''.
 +
        *[[Fichier:Type.png|Type.png]]
  
<span style="color:blue"><big><U> <p><FONT size="4">'''2.La syntaxe du langage'''</p></FONT></U></big></span>
+
        Chaque structure de données est liée à un caractère spécial.
Perl est dérivé du langage C et a conservé un grand nombre d'éléments de sa syntaxe (syntaxe de la boucle for, bloc délimité par des accolades, point-virgule en fin de ligne, indice des tableaux entre crochet, etc.).
+
          '''.1)Les variables scalaires'''
 +
                Les variables scalaires peuvent contenir soit '''des nombres soit des chaînes de caractères.'''
 +
 
 +
                *[[Fichier:TYPES.png|TYPES.png]]
 +
                        '''*Exemple'''
 +
                        $priority = 9;
 +
                        $priority = "high";
 +
                        $priority = 'high';
 +
              Les noms des variables  ne commencent jamais par un nombre. Elles ont pour préfixe le caractère $. La variable $_ est spéciale.
 +
              *'''Assignation'''
 +
              Les opérateurs arithmétiques fonctionnent comme en C.
 +
                    '''*Exemple'''
 +
                        $a = 1 + 2;
 +
                        $a++;
 +
                *'''Les opérateurs sur les Strings''' sont les suivants:
 +
                    '''*Exemple'''
 +
                        $a = $b . $c;  # Concaténation de $b et $c
 +
                        $a = $b x $c;  # $b est répété $c fois
 +
                        $a .= $b;      # On ajoute (append) $b à $a (String)
 +
              *'''Affichage des variables'''
 +
                    '''*Exemple'''
 +
                    Le code suivant affiche "pommes et poires" :
 +
                        $a = "pommes";
 +
                        $b = "poires";
 +
                        print "$a et $b\n";
  
====a) Les types de données ====
+
                    Le code suivant affiche "4 pommes" :
Perl est un langage faiblement typé. Il existe principalement '''trois structures de données''' : les scalaires, les tableaux et les tables de hachage. Chaque structure de données est liée à un caractère spécial.
+
                        $a = "pommes";
[[Fichier:Type.png|vignette]]
+
                        $b = 4;
 +
                        print "$b $a\n";
 +
        '''.2)Les variables de type tableau'''
 +
            *Les tableaux sont des listes de scalaires (nombres ou chaînes de caractères). Les variables de tableaux ont le même format que les variables
 +
            scalaires à part qu'elles sont préfixées par le symbole @.
 +
                        '''*Exemple'''
 +
                            @food  = ("apples", "pears", "eels");
 +
                            @music = ("whistle", "flute");
  
 +
            On assigne une liste de trois éléments dans une variable de tableau @food et une liste de deux éléments à une variable de tableau @music.
 +
            *On peut accéder aux différents éléments de ce tableau à l'aide d'indices démarrant à 0.
 +
            L'expression $food[2] retourne "eels".
 +
            On notera que le symbole @ a été changé en $ car "eels" est un scalaire.
 +
                       
 +
                            $food[3] = "orange";
 +
                            L'instruction permet d'assigner le scalaire "orange" à la position 3 du tableau @food;
 +
                            On pourrait également utiliser l'instruction push(@food, "eggs"); afin d'ajouter le scalaire "orange" à la fin du tableau.
 +
                            La fonction push retourne la longueur de la nouvelle liste.
 +
                            L'indice du dernier élément de la liste peut se retrouver à l'aide de '''l'expression $#food.'''
  
'''.1)Les variables scalaires'''
+
            *On peut '''supprimer le dernier élément de la liste''', on peut utiliser '''la fonction pop'''.
Les variables scalaires peuvent contenir soit des nombres soit des chaînes de caractères.
+
            Cette fonction retourne l'élément supprimé.
[[Fichier:TYPES.png|vignette]]
+
                            $element = pop(@food);    #  $element = "eels"
  
Exempl:e
+
            *'''Affichage d'un tableau'''
$priority = 9;
+
                          Les instructions suivantes permettent d'afficher le tableau @food :
$priority = "high";
+
                          print "@food";
$priority = 'high';
 
  
Les noms des variables comprennent en général des lettres, nombres et underscore, mais ne commencent jamais par un nombre. Elles ont pour préfixe le caractère $. La variable $_ est spéciale.
+
        '''.3)Les variables hachages(tableaux associatifs):'''
 +
              Les tables de hachage sont aussi appelées tableaux associatifs (comme en PHP), dictionnaires (comme en Python), ou simplement hachages (hash
 +
              en anglais) et constituent les structures de données les plus intéressantes de Perl.
  
'''Assignation'''
+
                          '''# Exemple de table de hachage en Perl :'''
Les opérateurs arithmétiques fonctionnent comme en C.
+
                              # %tab est une table de hachage
 +
                                my %tab = (nom=>"DUPONT",prenom=>"Pierre",age=>23);
  
$a = 1 + 2;
+
                            # $tab{nom} est l'élément "nom" de la table de hachage : il vaut "DUPONT" et c'est un scalaire
$a++;
+
                                print "NOM : $tab{nom}\n";
 +
                                print "Prénom : $tab{prenom}\n";
 +
                                print "Age : $tab{age}\n";
 +
  '''b)Les structures de contrôle'''
 +
        '''.1)Les conditions:'''
 +
              Le if marche comme en C comme le montre l'exemple suivant :
 +
              if ($a)
 +
              {
 +
        print "La chaine n'est pas vide\n";
 +
              }
 +
              else
 +
              {
 +
      print "La chaine est vide\n";
 +
              }
 +
              '''Les tests'''
 +
              Voici quelques tests qui retournent vrai ou faux :
  
'''Les opérateurs sur les Strings''' sont les suivants:
+
                                  $a == $b                # indique si $a est numériquement égal à $b?
 +
                                  $a != $b                # indique si $a n'est pas égal numériquement à $b?
 +
                                  $a eq $b                # indique si la chaîne de caractères $a est égale à la chaîne de caractères $b?
 +
                                  $a ne $b                # indique si la chaîne de caractères $a n'est pas égale à la chaîne de caractères $b?
 +
           
 +
      *'''.2) Les boucles :'''
 +
            *'''foreach'''
  
$a = $b . $c;  # Concaténation de $b et $c
+
              Pour parcourir chaque élément d'un tableau, Perl utilise une structure foreach qui s'utilise comme suit :
$a = $b x $c;  # $b est répété $c fois
 
$a .= $b;      # On ajoute (append) $b à $a (String)
 
  
'''Affichage des variables'''
+
                                foreach $element (@food)        # Visite chaque élément de @food et le place dans $element
 +
                                {
 +
                                    print "$element\n";      # affiche $element
 +
                                }
  
Le code suivant affiche "pommes et poires" :
 
  
$a = "pommes";
+
              *'''Les boucles avec for et while'''
$b = "poires";
 
print "$a et $b\n";
 
  
Le code suivant affiche "4 pommes" :
+
              Le for et le while marchent comme en C comme montré dans les exemples ci-dessous :
  
$a = "pommes";
+
                                for ($i = 0; $i < 10; $i++)
$b = 4;
+
                                {
print "$b $a\n";
+
                                    print "$i\n";
 +
                                }
  
.2)'''Les variables de type tableau'''
+
                                  $cnt = 0;
Les tableaux sont des listes de scalaires (nombres ou chaînes de caractères). Les variables de tableaux ont le même format que les variables scalaires à part qu'elles sont préfixées par le symbole @.
+
                                  open(INFO,$file);
L'instruction
+
                                  while($line = <INFO>){ #tant qu'on est pas arrivé à la fin du fichier
 +
                                  #  print "$line";
 +
                                      $cnt++;
 +
                                    }
 +
                                      print "Le fichier ci-dessus contient $cnt lignes\n";
  
@food  = ("apples", "pears", "eels");
 
@music = ("whistle", "flute");
 
  
assigne une liste de trois éléments dans une variable de tableau @food et une liste de deux éléments à une variable de tableau @music.
+
*'''.3) #Les fichiers'''
 +
                Voici un programme Perl qui affiche le contenu du fichier "/etc/passwd" en sortie standard.
  
On peut accéder aux différents éléments de ce tableau à l'aide d'indices démarrant à 0. L'expression $food[2] retourne "eels". On notera que le symbole @ a été changé en $ car "eels" est un scalaire.
+
                      #!/usr/local/bin/perl -w
 +
                      #
  
L'instruction
+
                        $file = "/etc/passwd";  # Nom du fichier
 +
                        open(INFO, $file);      # ouverture du fichier
 +
                        @lines = <INFO>;        # lecture du fichier dans un tableau
 +
                        close(INFO);            # fermeture du fichier
 +
                        print @lines;            # affichage du tableau
  
$food[3] = "orange";
+
                        *La fonction open ouvre le fichier en lecture.
 +
                        *Le premier argument est le descripteur de fichier qui permet à Perl de se référer au fichier.
 +
                        *Le deuxième argument indique le nom du fichier.
 +
                        *La fonction close indique à Perl de fermer le descripteur de fichier. Dans le programme ci-dessus, l'information est lue dans un
 +
                          fichier.
 +
                        *Le fichier a pour descripteur INFO, et pour lire dans celui-ci, Perl utilise des angles.
 +
                          Ainsi, l'instruction    @lines = <INFO>;lit le fichier référencé par INFO et met son contenu dans le tableau @lines.
 +
                          Notez que l'expression <INFO> lit le fichier entièrement en une seule fois.
 +
                          Ceci est dû au fait que la lecture a pour contexte une variable de tableau.
 +
                          Si @lines est remplacé par un scalaire $lines alors seule la prochaine ligne est lue.
 +
                          Dans chacun des cas, chaque ligne est stockée complètement avec son caractère "newline" à la fin.
  
permet d'assigner le scalaire "orange" à la position 3 du tableau @food; on pourrait également utiliser l'instruction
+
                          *Le fichier peut être ouvert en écriture également ou en ajout. Pour cela, il faut préfixer le nom du fichier avec > si écriture
 +
                          et un >> si ajout :
  
push(@food, "eggs");
+
                          open(INFO, $file);      # ouvert en lecture
 +
                          open(INFO, ">$file");  # ouvert en écriture
 +
                          open(INFO, ">>$file");  # ouvert en ajout
 +
                          open(INFO, "<$file");   # ouvert en lecture
  
afin d'ajouter le scalaire "orange" à la fin du tableau. La fonction push retourne la longueur de la nouvelle liste. L'indice du dernier élément de la liste peut se retrouver à l'aide de l'expression $#food.
+
                          *Pour écrire dans un fichier que vous avez déjà ouvert en écriture, vous pouvez utiliser l'instruction print avec un argument
 +
                          supplémentaire.  
 +
                          *Pour écrire une chaîne de caractères dans un fichier dont le descripteur de fichier est INFO, utiliser
  
Pour supprimer le dernier élément de la liste, on peut utiliser la fonction pop. Cette fonction retourne l'élément supprimé.
+
                            print INFO "This line goes to the file.\n";
  
$element = pop(@food);    #  $element = "eels"
+
                          *Pour ouvrir l'entrée standard et la sortie standard, vous pouvez utilisez respectivement :
  
'''Affichage d'un tableau'''
+
                            open(INFO, '-');        # Ouverture de l'entrée standard
 +
                            open(INFO, '>-');      # Ouverture de la sortie standard
  
Les instructions suivantes permettent d'afficher le tableau @food :
 
  
print "@food";
+
===== '''Exemple de traitement d'un formulaire en PERL''' =====
 
 
.3)'''Les variables hachages(tableaux associatifs):'''
 
 
 
les tables de hachage sont aussi appelées tableaux associatifs (comme en PHP), dictionnaires (comme en Python), ou simplement hachages (hash en anglais) et constituent les structures de données les plus intéressantes de Perl.
 
 
 
'''# Exemple de table de hachage en Perl :'''
 
# %tab est une table de hachage
 
my %tab = (nom=>"DUPONT",prenom=>"Pierre",age=>23);
 
 
 
# $tab{nom} est l'élément "nom" de la table de hachage : il vaut "DUPONT" et c'est un scalaire
 
print "NOM : $tab{nom}\n";
 
print "Prénom : $tab{prenom}\n";
 
print "Age : $tab{age}\n";
 
'''#Les fichiers'''
 
Voici un programme Perl qui affiche le contenu du fichier "/etc/passwd" en sortie standard.
 
 
 
#!/usr/local/bin/perl -w
 
#
 
 
 
$file = "/etc/passwd";  # Nom du fichier
 
open(INFO, $file);      # ouverture du fichier
 
@lines = <INFO>;        # lecture du fichier dans un tableau
 
close(INFO);            # fermeture du fichier
 
print @lines;            # affichage du tableau
 
 
 
La fonction open ouvre le fichier en lecture. Le premier argument est le descripteur de fichier qui permet à Perl de se référer au fichier. Le deuxième argument indique le nom du fichier. La fonction close indique à Perl de fermer le descripteur de fichier. Dans le programme ci-dessus, l'information est lue dans un fichier. Le fichier a pour descripteur INFO, et pour lire dans celui-ci, Perl utilise des angles. Ainsi, l'instruction
 
 
 
@lines = <INFO>;
 
 
 
lit le fichier référencé par INFO et met son contenu dans le tableau @lines. Notez que l'expression <INFO> lit le fichier entièrement en une seule fois. Ceci est dû au fait que la lecture a pour contexte une variable de tableau. Si @lines est remplacé par un scalaire $lines alors seule la prochaine ligne est lue. Dans chacun des cas, chaque ligne est stockée complètement avec son caractère "newline" à la fin.
 
 
 
Le fichier peut être ouvert en écriture également ou en ajout. Pour cela, il faut préfixer le nom du fichier avec > si écriture et un >> si ajout :
 
 
 
open(INFO, $file);      # ouvert en lecture
 
open(INFO, ">$file");  # ouvert en écriture
 
open(INFO, ">>$file");  # ouvert en ajout
 
open(INFO, "<$file");  # ouvert en lecture
 
 
 
Pour écrire dans un fichier que vous avez déjà ouvert en écriture, vous pouvez utiliser l'instruction print avec un argument supplémentaire. Pour écrire une chaîne de caractères dans un fichier dont le descripteur de fichier est INFO, utiliser
 
 
 
print INFO "This line goes to the file.\n";
 
 
 
Pour ouvrir l'entrée standard et la sortie standard, vous pouvez utilisez respectivement :
 
 
 
open(INFO, '-');        # Ouverture de l'entrée standard
 
open(INFO, '>-');      # Ouverture de la sortie standard
 
  
'''b)Les structures de contrôle'''
+
*Perl est un langage de script puissant et efficace pour traiter les fichiers texte.
.1)'''Les conditions'''
+
Il est très utilisé comme langage de script pour effectuer des traitements CGI sur le serveur.
 +
La syntaxe du code est proche de celle du langage C, et peut être adressé directement :
 +
*dans un lien hypertexte URL du genre <A HREF=http://www.serveur/cgi-bin/pgr.pl>
 +
*ou dans une soumission de formulaire <FORM ACTION="http://www.serveur/cgi-bin/pgr.pl" METHOD=POST>
 +
Il est compilé, puis exécuté par le moteur Perl.
 +
=[[Fichier:Formulaire_perl.png]]
 +
*Les 2 méthodes de codage
 +
Rappels
 +
La méthode GET consiste à ajouter à l'URL la chaine d'encodage des infos du formulaire.
 +
Cet URL est passé dans la variable QUERY_STRING
 +
Pour la méthode POST, la même chaine est expédiée sur l'entrée standard du script de CGI connecté à la soumission du formulaire.
 +
Scripts de décodage
 +
méthode GET: script get.pl
 +
#recupere le contenu de la variable d'environnement
 +
$input = $ENV{"QUERY_STRING"};
 +
#dissocie la chaine de caracteres en une liste
 +
@liste= split(/&/,$input);
 +
#parcours de la liste
 +
foreach (@liste) {
 +
#dissocie la paire nom=valeur
 +
($name,$value)= split(/=/, $_);
 +
#decode les valeurs
 +
$name =~  s/%(..)/pack("c",hex($1))/ge;
 +
$value =~  s/%(..)/pack("c",hex($1))/ge;
  
Le if marche comme en C comme le montre l'exemple suivant :
+
#Traitement des données ....
if ($a)
 
{
 
print "La chaine n'est pas vide\n";
 
 
}
 
}
else
+
méthode POST : script post.pl
{
+
#recupere le contenu du buffer de l'entrée standard STDIN
print "La chaine est vide\n";
+
$in = <STDIN>;
}
+
#supprime les deux CRLF insérés par le protocole HTTP
Les accolades sont néanmoins obligatoires.
+
chop($in);
'''Les tests'''
+
chop($in);
 
+
#dissocie la chaine de caractère en une liste
Voici quelques tests qui retournent vrai ou faux :
+
@liste = split(/&/,$in);
 
+
#parcours de la liste
$a == $b                # indique si $a est numériquement égal à $b?
+
foreach(@liste) {
$a != $b                # indique si $a n'est pas égal numériquement à $b?
+
#dissocie la paire nom=valeur
$a eq $b                # indique si la chaîne de caractères $a est égale à la chaîne de caractères $b?
+
($nom,$valeur)= split(/=/, $_);
$a ne $b                # indique si la chaîne de caractères $a n'est pas égale à la chaîne de caractères $b?
+
#decode les valeurs
 +
$nom  =~  s/%(..)/pack("c",hex($1))/ge;
 +
$valeur =~  s/%(..)/pack("c",hex($1))/ge;
  
On peut aussi utiliser des opérateurs logiques :
+
#Traitement des donnees ...
 
+
}  
($a && $b)              # $a ET $b
+
*'''Le formulaire'''
($a || $b)              # $a OU $b
+
[[Fichier:Fo1.png|Fo1.png]]
!($a)                  # NON $a
 
 
 
'''.2) Les boucles :'''
 
    *'''foreach'''
 
 
 
Pour parcourir chaque élément d'un tableau, Perl utilise une structure foreach qui s'utilise comme suit :
 
 
 
foreach $element (@food)        # Visite chaque élément de @food et le place dans $element
 
{
 
        print "$element\n";      # affiche $element
 
}
 
 
 
 
 
'''Les boucles avec for et while'''
 
 
 
Le for et le while marchent comme en C comme montré dans les exemples ci-dessous :
 
 
 
for ($i = 0; $i < 10; $i++)
 
{
 
  print "$i\n";
 
}
 
 
 
$cnt = 0;
 
open(INFO,$file);
 
while($line = <INFO>){ #tant qu'on est pas arrivé à la fin du fichier
 
    #  print "$line";
 
    $cnt++;
 
}
 
print "Le fichier ci-dessus contient $cnt lignes\n";
 
 
 
 
 
Les accolades sont néanmoins obligatoires.
 
 
 
 
 
===== '''Exemple de traitement d'un formulaire en PERL''' =====
 
  
  
=[[Fichier:Formulaire_perl.png]]  
+
*'''Le script Perl:'''
 +
[[Fichier:Fo2.png|Fo2.png]]
 
}}<!--************** Fin Fiche Didactique Explicitations ******************* -->
 
}}<!--************** Fin Fiche Didactique Explicitations ******************* -->
  
Ligne 398 : Ligne 436 :
 
* [[Quelle est la différence entre ``perl'' et ``Perl'' ?]]
 
* [[Quelle est la différence entre ``perl'' et ``Perl'' ?]]
 
* [[Parle-t-on de programme Perl ou de script Perl ?]]
 
* [[Parle-t-on de programme Perl ou de script Perl ?]]
* [[Qu'est ce qu'un JAPH ?]]
 
 
* [[Comment rechercher un élément d'un hachage par sa valeur ?]]
 
* [[Comment rechercher un élément d'un hachage par sa valeur ?]]
 
* [[Comment faire l'équivalent en Perl d'une structure en C, d'une classe/d'un hachage en C++ ou d'un tableau de hachages ou de tableaux ?]]
 
* [[Comment faire l'équivalent en Perl d'une structure en C, d'une classe/d'un hachage en C++ ou d'un tableau de hachages ou de tableaux ?]]

Version actuelle datée du 23 mai 2021 à 22:21


Autres Fiches Conceptuelles
Posez une Question


(+)

Target Icon.pngVotre Publicité sur le Réseau Target Icon.png

Puce-didaquest.png Traduction


More-didaquest.png Traductions


Puce-didaquest.png Définition

Domaine, Discipline, Thématique


More-didaquest.png Justification


Définition écrite



Blue-circle-target.png Information sur Perl

     * Date de première version: 18 décembre 1987 .
     * Paradigmes: Objet, impératif, fonctionnel, réflexif, procédural, événementiel, générique
     * Auteur: Larry Wall
     * Développeurs: The Perl Foundation
     * Licence: Licence artistique 1.0[4][5] ou licence publique générale GNU[6]
                   
     * Dernière version: 5.32.1 (23 janvier 2021)
     * Système d'exploitation: Multiplateforme
     * Typage: Faible, dynamique
     * Influencé par: C, BASIC, Eiffel, shell, sed, awk
     * Écrit en: C
     * Extensions de noms de fichiers: .plx, .pl, .pm, .xs, .t, .pod
     * Site internet: www.perl.org


Blue-circle-target.png Environnement Perl

  • Pour travailler avec Perl, vous allez avoir besoin de deux programmes : un interpréteur Perl et un éditeur de texte.
  • Pour installer l’interpréteur Perl sur votre machine, rendez vous sur http://strawberryperl.com/, puis cliquez sur la version qui correspond à votre ordinateur.
  • Maintenant, pour programmer il faut utiliser un éditeur de texte pour écrire le fichier source d'un programme écrit en Perl.
 Il en existe plusieurs editeurs comme :*Gedit.jpeg ,  *Notepad++.jpegNotepad++......

  • Maintenant que vous avez tous les outils nécessaires pour coder en Perl, nous allons enfin réaliser notre premier programme !


Blue-circle-target.png votre premier programme

 Exemple
     use strict;
     use warnings;
     print "Hello, world!";
     <>;
    
     La première ligne est un commentaire obligatoire qui indique l'endroit où les trouve l'interpréteur Perl.
     La deuxième ligne est une commande, qui imprimera Hello, world! à l'écran une fois exécuté le programme


Blue-circle-target.png comment exécuter un programme perl

Le mettre dans un fichier, par exemple helloworld.pl.
Rendre le fichier exécutable (LINUX: chmod u+x helloworld.pl).
Taper le nom du fichier helloworld.pl
    Exec.png

More-didaquest.png Perl - Historique (+)


Définition graphique




Puce-didaquest.png Concepts ou notions associés


More-didaquest.png Perl - Glossaire / (+)



Puce-didaquest.png Exemples, applications, utilisations


Blue-circle-target.png Syntaxe du langage

  • Perl est dérivé du langage C et a conservé un grand nombre d'éléments de sa syntaxe (syntaxe de la boucle for, bloc délimité par des accolades, point-virgule en fin de ligne, indice des tableaux entre crochet, etc...).
   a) Les types de données
        Perl est un langage faiblement typé. 
        Il existe principalement trois structures de données : les scalaires, les tableaux et les tables de hachage. 
        *Type.png
        Chaque structure de données est liée à un caractère spécial.
         .1)Les variables scalaires
               Les variables scalaires peuvent contenir soit des nombres soit des chaînes de caractères. 
 
               *TYPES.png
                       *Exemple
                        $priority = 9;
                        $priority = "high";
                        $priority = 'high';
              Les noms des variables  ne commencent jamais par un nombre. Elles ont pour préfixe le caractère $. La variable $_ est spéciale.
              *Assignation
              Les opérateurs arithmétiques fonctionnent comme en C.
                    *Exemple
                        $a = 1 + 2;
                        $a++;
                *Les opérateurs sur les Strings sont les suivants:
                    *Exemple
                        $a = $b . $c;   # Concaténation de $b et $c
                        $a = $b x $c;   # $b est répété $c fois
                        $a .= $b;       # On ajoute (append) $b à $a (String)
              *Affichage des variables
                    *Exemple
                   Le code suivant affiche "pommes et poires" :
                        $a = "pommes";
                        $b = "poires";
                        print "$a et $b\n";
                   Le code suivant affiche "4 pommes" :
                        $a = "pommes";
                        $b = 4;
                        print "$b $a\n";
        .2)Les variables de type tableau
           *Les tableaux sont des listes de scalaires (nombres ou chaînes de caractères). Les variables de tableaux ont le même format que les variables 
            scalaires à part qu'elles sont préfixées par le symbole @.
                       *Exemple
                           @food  = ("apples", "pears", "eels");
                           @music = ("whistle", "flute");
           On assigne une liste de trois éléments dans une variable de tableau @food et une liste de deux éléments à une variable de tableau @music.
           *On peut accéder aux différents éléments de ce tableau à l'aide d'indices démarrant à 0. 
           L'expression $food[2] retourne "eels".
           On notera que le symbole @ a été changé en $ car "eels" est un scalaire.
                        
                           $food[3] = "orange";
                           L'instruction permet d'assigner le scalaire "orange" à la position 3 du tableau @food; 
                           On pourrait également utiliser l'instruction push(@food, "eggs"); afin d'ajouter le scalaire "orange" à la fin du tableau.
                           La fonction push retourne la longueur de la nouvelle liste. 
                           L'indice du dernier élément de la liste peut se retrouver à l'aide de l'expression $#food.
           *On peut supprimer le dernier élément de la liste, on peut utiliser la fonction pop. 
            Cette fonction retourne l'élément supprimé.
                           $element = pop(@food);     #  $element = "eels"
           *Affichage d'un tableau
                          Les instructions suivantes permettent d'afficher le tableau @food :
                          print "@food";
        .3)Les variables hachages(tableaux associatifs):
             Les tables de hachage sont aussi appelées tableaux associatifs (comme en PHP), dictionnaires (comme en Python), ou simplement hachages (hash 
             en anglais) et constituent les structures de données les plus intéressantes de Perl.
                          # Exemple de table de hachage en Perl :
                             # %tab est une table de hachage
                               my %tab = (nom=>"DUPONT",prenom=>"Pierre",age=>23);
                            # $tab{nom} est l'élément "nom" de la table de hachage : il vaut "DUPONT" et c'est un scalaire
                               print "NOM : $tab{nom}\n";
                               print "Prénom : $tab{prenom}\n";
                               print "Age : $tab{age}\n";
 b)Les structures de contrôle
       .1)Les conditions:
             Le if marche comme en C comme le montre l'exemple suivant :
             if ($a)
             {

print "La chaine n'est pas vide\n";

             }
             else
             {

print "La chaine est vide\n";

             }
              Les tests
             Voici quelques tests qui retournent vrai ou faux :
                                 $a == $b                # indique si $a est numériquement égal à $b?
                                 $a != $b                # indique si $a n'est pas égal numériquement à $b?
                                 $a eq $b                # indique si la chaîne de caractères $a est égale à la chaîne de caractères $b?
                                 $a ne $b                # indique si la chaîne de caractères $a n'est pas égale à la chaîne de caractères $b?
           
     *.2) Les boucles :
            *foreach
             Pour parcourir chaque élément d'un tableau, Perl utilise une structure foreach qui s'utilise comme suit :
                                foreach $element (@food)         # Visite chaque élément de @food et le place dans $element
                                {
                                   print "$element\n";      # affiche $element
                                }


             *Les boucles avec for et while
             Le for et le while marchent comme en C comme montré dans les exemples ci-dessous :
                                for ($i = 0; $i < 10; $i++)
                                {
                                   print "$i\n";
                                } 
                                  $cnt = 0;
                                  open(INFO,$file);
                                  while($line = <INFO>){ #tant qu'on est pas arrivé à la fin du fichier
                                  #   print "$line";
                                      $cnt++;
                                   }
                                     print "Le fichier ci-dessus contient $cnt lignes\n";


  • .3) #Les fichiers
               Voici un programme Perl qui affiche le contenu du fichier "/etc/passwd" en sortie standard.
                      #!/usr/local/bin/perl -w
                      #
                        $file = "/etc/passwd";   # Nom du fichier
                        open(INFO, $file);       # ouverture du fichier
                        @lines = <INFO>;         # lecture du fichier dans un tableau
                        close(INFO);             # fermeture du fichier
                        print @lines;            # affichage du tableau
                        *La fonction open ouvre le fichier en lecture.
                        *Le premier argument est le descripteur de fichier qui permet à Perl de se référer au fichier. 
                        *Le deuxième argument indique le nom du fichier. 
                        *La fonction close indique à Perl de fermer le descripteur de fichier. Dans le programme ci-dessus, l'information est lue dans un 
                         fichier. 
                        *Le fichier a pour descripteur INFO, et pour lire dans celui-ci, Perl utilise des angles. 
                         Ainsi, l'instruction     @lines = <INFO>;lit le fichier référencé par INFO et met son contenu dans le tableau @lines. 
                         Notez que l'expression <INFO> lit le fichier entièrement en une seule fois. 
                         Ceci est dû au fait que la lecture a pour contexte une variable de tableau. 
                         Si @lines est remplacé par un scalaire $lines alors seule la prochaine ligne est lue. 
                         Dans chacun des cas, chaque ligne est stockée complètement avec son caractère "newline" à la fin.
                         *Le fichier peut être ouvert en écriture également ou en ajout. Pour cela, il faut préfixer le nom du fichier avec > si écriture 
                          et un >> si ajout :
                         open(INFO, $file);      # ouvert en lecture
                         open(INFO, ">$file");   # ouvert en écriture
                         open(INFO, ">>$file");  # ouvert en ajout
                         open(INFO, "<$file");   # ouvert en lecture
                         *Pour écrire dans un fichier que vous avez déjà ouvert en écriture, vous pouvez utiliser l'instruction print avec un argument 
                          supplémentaire. 
                         *Pour écrire une chaîne de caractères dans un fichier dont le descripteur de fichier est INFO, utiliser
                           print INFO "This line goes to the file.\n";
                          *Pour ouvrir l'entrée standard et la sortie standard, vous pouvez utilisez respectivement :
                            open(INFO, '-');        # Ouverture de l'entrée standard
                            open(INFO, '>-');       # Ouverture de la sortie standard


Exemple de traitement d'un formulaire en PERL
  • Perl est un langage de script puissant et efficace pour traiter les fichiers texte.

Il est très utilisé comme langage de script pour effectuer des traitements CGI sur le serveur. La syntaxe du code est proche de celle du langage C, et peut être adressé directement :

Il est compilé, puis exécuté par le moteur Perl. =Formulaire perl.png

  • Les 2 méthodes de codage

Rappels La méthode GET consiste à ajouter à l'URL la chaine d'encodage des infos du formulaire. Cet URL est passé dans la variable QUERY_STRING Pour la méthode POST, la même chaine est expédiée sur l'entrée standard du script de CGI connecté à la soumission du formulaire. Scripts de décodage méthode GET: script get.pl

  1. recupere le contenu de la variable d'environnement

$input = $ENV{"QUERY_STRING"};

  1. dissocie la chaine de caracteres en une liste

@liste= split(/&/,$input);

  1. parcours de la liste

foreach (@liste) {

#dissocie la paire nom=valeur

($name,$value)= split(/=/, $_);

#decode les valeurs
$name =~   s/%(..)/pack("c",hex($1))/ge;
$value =~  s/%(..)/pack("c",hex($1))/ge;
#Traitement des données ....

} méthode POST : script post.pl

#recupere le contenu du buffer de l'entrée standard STDIN

$in = <STDIN>;

#supprime les deux CRLF insérés par le protocole HTTP

chop($in); chop($in);

#dissocie la chaine de caractère en une liste

@liste = split(/&/,$in);

#parcours de la liste

foreach(@liste) {

#dissocie la paire nom=valeur
($nom,$valeur)= split(/=/, $_);
#decode les valeurs
$nom  =~  s/%(..)/pack("c",hex($1))/ge;
$valeur =~  s/%(..)/pack("c",hex($1))/ge;
#Traitement des donnees ...

}

  • Le formulaire

Fo1.png


  • Le script Perl:

Fo2.png


(+)


Puce-didaquest.png Erreurs ou confusions éventuelles



Puce-didaquest.png Questions possibles



Puce-didaquest.png Liaisons enseignements et programmes

  • Les bases de données : Il s'agit d'aborder le modèle relationnel, les systèmes de gestion de bases de données relationnelles et le langage SQL ;

et aussi les interfaces qui permettent la communication, la collecte des données et la commande des systèmes. Perl en tire une partie de sa grande puissance pour l'analyse et le traitement des données textuelles.


}}

Aides et astuces



Education: Autres liens, sites ou portails




Puce-didaquest.png Bibliographie