Le Script en PERL - Premier essai
novembre 28, 2007Or donc, nous disposions d’un script fonctionnel mais basé sur une commande non-universelle en ce qui concerne les systèmes de type BASH.
Après un essai infructueux sur d’autres shells (csh et tcsh), qui renvoyaient des messages d’erreurs sans dire où se trouvait l’erreur (ce qui aurait impliqué de revoir tout le programme), nous nous sommes lancés dans la production d’un script en PERL. Parce que substr() est une fonction native de PERL. Et ça, c’est bien !
Avertissement : N’essayez pas de retaper tout un script. C’est un coup à oublier des morceaux. Commencez par remplacer tous les “echo” par “print”, ça gagne du temps.
Ensuite, la syntaxe PERL est quand même assez proche de celle de BASH,les modifs sont de l’ordre de l’ajout de ‘;’ et… bon, en fait, il y a quelques subtilités :
Par exemple, en BASH, on avait tout un pavé pour s’assurer qu’un nom de répertoire saisi par l’utilisateur ne comportait pas de / à la fin.
En PERL, cette opération donne :
- chomp($inputdirectory=<STDIN>);
if ($inputdirectory=~/\w*\/$/)
{chop($inputdirectory);
}
Une petite explication ?
- la première ligne récupère une chaîne de caractère saisie par l’utilisateur ($inputdirectory=<STDIN>et lui enlève son retour chariot final (commande chomp()). Notez le ‘;’ en fin de ligne… C’est le défaut de PERL : toute les instructions sont terminées par un point-virgule.
- la deuxième ligne est un if classique… Or is it ? En effet, PERL a l’excellente capacité de gérer les expressions régulières. Là, on a en fait pris pour condition :
“$inputdirectory est une chaîne de caractère terminée par slash”. ‘=~’ signifie qu’on va employer une expression régulière, or les expressions régulières sont ouvertes et fermées par des slashs ‘/’ . Du coup, il faut échapper un slash qui ferait partie de l’expression en le faisant précéder d’un antislash ‘\’, caractère d’échappement par défaut. De plus, ‘\w’ indique “n’importe quel caractère alphanumérique”, et l’étoile indique que \w est pris un nombre indéfini de fois (entre 0 et +∞). Autrement dit ‘\w*’ indique “toute chaîne de caractères alphanumériques”. En l’occurence, suivi de ‘\/’ et ‘$ ‘, on a “toute chaîne alphanumérique se terminant par ‘/’ : En effet, $ indique une fin de chaîne. Donc le caractère juste avant ‘$’ est le dernier de la chaîne.
Bon, ça c’est juste une petite simplification. Après, il y a notre histoire de substr facile, tout ça…
Mais abordons la grosse-modif-qui-tache tout de suite, ce sera fait.
PERL a sa façon bien à lui de gérer les fichiers. Or, on ne fait que ça dans ce script. Du coup, à l’heure actuelle, on a comme qui dirait un pépin à ce niveau là.
Mais parlons théorie :
au lieu de créer une variable $tablo qui contiendrait un nom de fichier et de devoir rajouter ‘>> ./tabs/$tablo’ à la fin de nos lignes echo, nous allons :
- ouvrir un manipulateur de fichier nommé TABLO
- avoir plein de jolies lignes du genre ‘print TABLO “<HTML>blah-blah-blah</HTML>”;
- fermer le manipulateur de fichiers.
Ouvrir un manipulateur de fichier, ça veut dire aller chercher un fichier et le donner en pâture au programme avec quelques conditions (droits de lecture/ecriture). Ca donne ça :
open (TABLO,”+>./tabs/$tablo”);
‘+>’, ça veut dire qu’on efface un contenu éventuel du fichier pour ensuite entasser ce qu’on veut dedans.
TABLO, c’est le nom du flux, qu’on retrouvera dans les commandes print.
et ‘./tabs/$tablo’, c’est le fichier vers lequel pointe notre flux.
puis on finit avec un ‘close(TABLO);’ de bon aloi pour éviter d’écrire à nouveau dans le fichier par erreur et rendre un peu de ressource au système.
La suite dès que nous aurons un script qui fonctionne… C’est à dire très bientôt !
QP
Publié par ksqp