Sujet 2 : Comparaison du langage Perl avec le Bash

Transcription

Sujet 2 : Comparaison du langage Perl avec le Bash
Sujet 2 : Comparaison du langage Perl avec le Bash
PERL
PERL est un langage extrêmement répandu qui, grâce à ses extensions multiples, trouve
son usage dans de nombreuses applications.
•
langage de Shell (en écran de commande),
•
langage de script pour Internet, côté serveur ou navigateur,
•
base de données (Mysql, PostGre, ...),
•
interface graphique (notamment avec Tk)
De plus, il est disponible sous Linux mais aussi sous Windows, ce qui en fait un langage
universel.
Il a précédé en cela d'autres langages ou outils, qui ont été à leur tour portés sous d'autres
environnements: on trouve sous Windows notamment Bash, Tcl, Gimp et sûrement bien
d'autres.
Langage de Shell
Comme Bash, PERL est un langage de shell. Comme lui, il dispose du traitement
des variables, des conditions, des boucles et des fonctions.
PERL est un langage de script très puissant (avec des extensions orientées objet et
de puissantes fonctionnalités de traitement de chaînes et d'expressions régulières). Il est
largement utilisé pour écrire des scripts CGI et même pour des applications plus
importantes. Il dispose d’une très importante bibliothèque de fonction permettant de faire
du ftp, d'envoyer des emails, de lire des fichiers zippés.
PERL est un langage qui a été conçu pour être facile à utiliser, efficient et complet
plutôt que beau, élégant et compact. Bien que peu connu en dehors du monde des
programmeurs Internet, le langage PERL semble voué à un bel avenir : en effet Microsoft
a annoncé que Windows NT 5 supporterait PERL comme langage de script. Il ne semble
pas prêt à disparaître comme beaucoup l’ont cru en 1995 avec l’arrivée du Java. Il
combine plusieurs des meilleures fonctions du C et du Shell Unix et dispose de fonctions
de recherches sophistiquées pour traiter des grosses quantités de données rapidement.
Bien que conçu pour traiter du texte, il peut aussi traiter des données binaires.
Les variables locales et globales :
Les variables peuvent être définies au niveau global ou au niveau local de la fonction par
le mot clé my.
Les tableaux associatifs :
Ceci n'est pas nouveau en PERL, mais diffère de la notion classique de tableaux.
En effet, dans la plupart des langages, un tableau est défini par son nombre d'éléments,
dans chacune de ses dimensions. On accède à un élément par un indice, qui représente
son n° d'ordre dans la dimension considérée .Ex : tableau[i] en Bash.
En revanche, un tableau associatif, lui, travaille avec des clés, ce qui permet un accès plus
direct aux éléments du tableau.
Par exemple, on désire un tableau donnant des notes d’une classe ; on accède directement
avec la clé "SOL" à la note voulue, au lieu de rechercher l'indice auquel se trouve la note.
L'intérêt est très grand avec des données chargées en ordre quelconque, contrairement
aux notes de musique qui sont bien déterminées. Nous verrons un tableau dans la
fonction en perl que j’ai développé ci-dessous.
Programmation aussi orienté objet :
PERL propose aussi une programmation sous forme objet qui, à la diffèrence d'autres
langages, autorise une programmation modulaire et fiable des applications.
Autres fonctionnalités :
Enfin, Perl propose quantités de fonctions de traitement des chaînes de caractères,
mathématiques, variables système, examen des processus en cours ; qui en font un
langage d'usage général.
Bash
Bash est une version évoluée du shell sh (le “Bourne shell”). Le shell peut être utilisé
comme un simple interpréteur de commande, mais il est aussi possible de l’utiliser
comme langage de programmation interprété (scripts).
La connaissance du shell est indispensable au travail de l’administrateur Unix :
- le travail en “ligne de commande” est souvent beaucoup plus efficace qu’à travers une
interface graphique ;
- dans de nombreux contextes (serveurs, systèmes embarqués, liaisons distantes
lentes) on ne dispose pas d’interface graphique ;
- Le shell permet l’automatisation aisée des tâches répétitives (scripts) ;
- de très nombreuses parties du système UNIX sont écrites en shell, il faut être
capable de les lire pour comprendre et éventuellement modifier leur fonctionnement.
Les mauvais côtés des shell :
Le shell possède quelques inconvénients :
– documentation difficile d’accès pour le débutant (la page de manuel “man bash” est
très longue et technique) ;
– messages d’erreurs parfois difficiles à exploiter, ce qui rend la mise au point des
scripts fastidieuses ;
– syntaxe cohérente, mais ardue (on privilégie la concision sur la clarté) ; relative lenteur
(langage interprété sans pré-compilation).
Ces mauvais côtés sont compensés par la facilité de mise en oeuvre (pas besoin
d’installer un autre langage sur votre système).
Bash ou Perl?
Nous avons vu qu’il était possible d’écrire des programmes en bash. Pour de nombreuses
tâches simples, c’est effectivement très commode. Néanmoins, le langage bash est
forcément assez limité ; pour des programmes plus ambitieux il est recommandé
d’utiliser des langages plus évolués comme Perl.
L'avantage du Perl est que le programme est un langage en script et non un code source à
compiler ce qui permet de porter votre programme directement sur toutes les platesformes supportées (Unix, Windows, Mac...) sans autre opération qu'une simple copie de
fichier.
Le PERL est un langage interprété : c'est un avantage et un inconvénient, cela dépend de
la manière dont on voit les choses. L'avantage, c'est que l'on peut améliorer le programme
sans avoir besoin de le recompiler à chaque fois que l'on veut le modifier.
L'inconvénient est qu'il est difficile de vendre un programme écrit en PERL car on vend
aussi ses sources et que comme il s'agit d'un langage interprété, il n'est pas aussi puissant
que le C ou le C++.
Code source de la fonction dévellopée:
#!/usr/bin/perl
$HOSTNAME = `/bin/hostname`; #Enregistrement du nom de la machine dans la
variable HOSTNAME
chop($HOSTNAME);
$machine = $HOSTNAME; #Copie de HOSTNAME dans machine
#Exécution de la commande awk avec redirection de l'entrée standard
$load = `awk '/cpu /' < /proc/stat`;
chop ($load);
$load =~ s/ / /; #Permet de réduire les double-espaces en un seul
#Découpe la chaine load d'après le séparateur " " et renvoit un tableau
($cpu,$user,$nice,$sys,$idle) = split (/ /, $load); #declaration du tableau avec split et / /
#$cpu: contient la chaîne de caractère “cpu”
#$user: Temps passé en mode utilisateur
#$nice: Temps passé en mode utilisateur en priorité basse
#$sys: Temps passé en mode système
#$idle: Temps passé en mode arrêté
#Temps exprimés en jiffies (1/100e s)
$total = $user + $nice;
print "$total\n";
$totalsys = $total + $sys;
print "$totalsys\n";
Commentaire sur la fonction :
La particularité du langage Perl et qu'il y a possibilité de déclaré un tableau contenant ce
que l'on veut (chaînes de caractères , chiffres .....) , dans chaque case du tableau il peut
avoir en quelque sorte une srtucture.

Documents pareils