Perl a cette différence et cette particularité de n'avoir aucune grammaire et n'etre que très peu sensible à la syntaxe. Cela permet au programmeur de ne pas forcement changer trop ces habitudes par rapport à d'autres langages qu'il peut utiliser, et au débutant de pouvoir progresser petit à petit sans forcement bloquer sur des détails.
Pourtant et malgré les libertés qu'accorde un peu trop facilement Perl, nous allons au sein de ce chapitre fixer un certain nombre de règles relatives. Ces règles sont relatives parce qu'elles ne sont pas indispensables au bon fonctionnement d'un programme, mais elles permettront une meilleure maintenabilité du code. D'un côté vous êtes sur d'avoir un code compréhensible pour toute la communauté des programmeurs en Perl, mais plus généralement, vous êtes sur que même des programmeurs C qui ont peu l'habitude du Perl comprendront et pourront intervenir sur votre code.
La première règle indispensable (nous en avons déjà parlé,
mais on ne le dira jamais assez) est l'utilisation du package
strict par la commande use strict; en troisième ligne de votre
code source. Ce package va vous obliger à déclarer vos variables
avant de les utiliser, vous ne pourrez les déclarer qu'une fois et
toujours en dehors d'un boucle.
#!/usr/bin/perl
use strict;
if($ARGV[0] ne "")
{
my $file = $ARGV[0];
}
else
{
die("Syntax : command.pl file");
}
N'est pas valable parce que vous déclarer une variable à l'intérieur d'une condition. Il faut utiliser la syntaxe suivante :
#!/usr/bin/perl
use strict;
my $file;
if($ARGV[0] ne "")
{
$file = $ARGV[0];
}
else
{
die("Syntax : command.pl file");
}
Ou nous avons déclaré la même variable avant de procéder à la condition.
Une autre règle très importante de la programmation en Perl est la
vérification des actions. Vous allez ouvrir un fichier et reprendre
les informations qu'il contient pour faire un traitement par lot et
afficher le résultat. Mais que se passe-t'il si le fichier à ouvrir
n'est pas présent la ou le programme s'attend à le trouver, ben il
va continuer bon gré mal gré à s'executer, au risque d'apporter un
resultat faux. Il est nécessaire de tester que l'ouverture de ce
fichier s'est bien déroulé en testant la valeur de retour envoyée
par la commande open .
Il y a deux façons de tester cela, la première consiste à
utiliser la fonction or :
open(IN,"<$file") or die("Can not read $file $!\n");
C'est sans conteste la plus << Perl >> des fonctions et peut être la
moins compréhensible pour les programmeurs d'autres langages. Je
préfère sans conteste la forme suivante, peut être plus longue et
moins lisible de prime abord mais plus puissante et plus claire si on
veut appliquer un traitement d'erreur plus complexe qu'un simple
die :
if(open(IN,"<$file"))
{
# traitement si l'ouverture a reussi
}
else
{
# traitement si l'ouverture a echoue
}
Cette manière d'écrire les choses présente aussi la possibilité
de proposer au programme plusieurs solutions avant d'arriver à
l'extrème die grâce à la fonction elsif .
Les commentaires en Perl sont tous précédés par le signe #
et vont jusqu'à la fin de la ligne. Il faut documenter son code de
manière à ce qu'il soit compris et repris le plus facilement
possible, un exemple à suivre sur la manière de document un sous
programme :
sub sous_prog # sous_prog prend l'argument $_[0] et renvoie
# et renvoie la valeur $_[0]+1
Cela vous permettra de ressortir un maximum d'informations par la simple commande :
~ $cat script.pl | grep #
Ce qui ressortira directement tous les
sub du programme et les commentaires qui vont avec.
Lorsque une fonction échoue, elle renvoie un message d'erreur et le place dans la variable $! . Si vous demandez au programme de mourrir suite à l'échec d'une fonction, précisez dans le message d'erreur.
die("Le message d'erreur est $!\n");
À la fin d'une commande, il est indispensable de mettre ; pour
préciser à Perl que l'on passe à la commande suivante. Malgré
tout, ce ; ne se met pas à la fin d'un boucle ou la simple
} suffit à préciser à Perl que l'on sort de la boucle et
que l'on rentre dans une nouvelle fonction.
L'appel à un sous programme peut s'effectuer de deux façons, soit
en précédant l'appel du signe & de la manière suivante
&sous_prog() soit en appelant directement le sous programme sans
rien préciser de plus sous_prog() . La première méthode a
l'avantage de fonctionner avec Perl version 4 alors que la seconde est
typiquement lié à Perl version 5.