Perl

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Perl
Type Langage interprété
Paradigmes Procédural, scriptable, orienté texte
Extension .pl
Bonnes pratiques use strict; use warnings;

Perl est un langage de programmation interprété, faiblement typé, très utilisé pour l'administration système, le traitement de texte et l'écriture de plugins de supervision. Cette page regroupe les bases de la syntaxe.

Usage

use strict;
use warnings;
print "Hello world" ;
<>;

Exécution :

perl fichier.pl

L'opérateur <> marque une pause en attendant une saisie sur l'entrée standard.

Variables

my $a = 3;
my $b = 2;
my $somme = $a + $b;
print "$a + $b = $somme";

Comparaisons

Booléens (numériques)

my $a = 2;
my $b = 4;

# La fonction "int" permet de convertir explicitement un scalaire en entier.
print "$a < $b  : " . int ($a < $b) . "\n";
print "$a > $b  : " . int ($a > $b) . "\n";
print "$a == $b : " . int ($a == $b) . "\n";
print "$a == $a : " . int ($a == $a) . "\n";
print "$a != $b : " . int ($a != $b) . "\n";
print "$a != $a : " . int ($a != $a) . "\n";
print "$a <= $b : " . int ($a <= $b) . "\n";
print "$a <= $a : " . int ($a <= $a) . "\n";

Chaînes de caractères

$a lt $b   # lesser than (plus petit)
$a gt $b   # greater than (plus grand)
$a eq $b   # equals
$a ne $b   # not equal
$a le $b   # lesser or equal
$a ge $b   # greater or equal

Opérateur « ou »

print '0 or 0 : ' . (0 or 0) . "\n";
print '0 or 1 : ' . (0 or 1) . "\n";
print '1 or 0 : ' . (1 or 0) . "\n";
print '1 or 1 : ' . (1 or 1) . "\n";

print '0 || 0 : ' . (0 || 0) . "\n";
print '0 || 1 : ' . (0 || 1) . "\n";
print '1 || 0 : ' . (1 || 0) . "\n";
print '1 || 1 : ' . (1 || 1) . "\n";

Opérateur « et »

print '0 and 0 : ' . (0 and 0) . "\n";
print '0 and 1 : ' . (0 and 1) . "\n";
print '1 and 0 : ' . (1 and 0) . "\n";
print '1 and 1 : ' . (1 and 1) . "\n";

print '0 && 0 : ' . (0 && 0) . "\n";
print '0 && 1 : ' . (0 && 1) . "\n";
print '1 && 0 : ' . (1 && 0) . "\n";
print '1 && 1 : ' . (1 && 1) . "\n";

Priorités

print '0 and 1 or 1 : ' . (0 and 1 or 1) . "\n";
print '0 and 1 || 1 : ' . (0 and 1 || 1) . "\n";
print '0 &&  1 or 1 : ' . (0 &&  1 or 1) . "\n";
print '0 and (1 or 1) : ' . (0 and (1 or 1)) . "\n";
print '(0 and 1) or 1 : ' . ((0 and 1) or 1) . "\n";

Structures conditionnelles

if / elsif / else

use strict;
use warnings;

print "Entrez le mot de passe : ";
my $pass = <>;
chomp $pass;

if ($pass eq "s'il te plait")
{
    print "Accès autorisé.\n";
    print "Bienvenue, Jean.\n";
}
elsif ($pass eq "sesame ouvre-toi")
{
    print "Accès autorisé.\n";
    print "Bienvenue, Marie.\n";
}
else
{
    print "Accès refusé.\n";
    print "Allez vous faire voir !\n";
}

unless (if inversé)

use strict;
use warnings;

print "Entrez le mot de passe : ";
my $pass = <>;
chomp $pass;

# Quitter le programme À MOINS QUE le mot de passe soit le bon.
unless ($pass eq "s'il te plait")
{
    print "Accès refusé.\nAllez vous faire voir !\n";
    exit(1);
}

print "Accès autorisé.\n";
print "Bienvenue.\n";

Boucles

while

while ($compteur < $limite)
{
    $compteur = $compteur + 1;
    print "$compteur lamas\n";
}

until

use strict;
use warnings;

my $nb_mystere = int (rand 101);
my $essai = -1;

print "Devinez le nombre mystère.\n";

until ($essai == $nb_mystere)
{
    print '> ';
    $essai = <>;
    if    ($essai < $nb_mystere) { print "C'est plus.\n"; }
    elsif ($essai > $nb_mystere) { print "C'est moins.\n"; }
}
print "Gagné !";

do ... while

use strict;
use warnings;

my $nb_mystere = int (rand 101);
my $essai;

print "Devinez le nombre mystère.\n";

do
{
    print '> ';
    $essai = <>;
    if    ($essai < $nb_mystere) { print "C'est plus.\n"; }
    elsif ($essai > $nb_mystere) { print "C'est moins.\n"; }
} while ($essai != $nb_mystere);

print "Gagné !";

for

use strict;
use warnings;

for (my $compteur = 0; $compteur <= 30; $compteur++)
{
    print "$compteur\n";
}

Portée et blocs

La notion de bloc crée une zone de portée pour les variables déclarées avec my (voir Perl — my (portée)).

use strict;
use warnings;

my $var = "Hello";

{
    my $var2 = "World";
    print $var;   # affiche "Hello"
    print $var2;  # affiche "World"
}

print $var;   # affiche "Hello"
print $var2;  # ERREUR : $var2 n'existe plus hors du bloc

Incrémentation

$compteur = 4;
$compteur += 1; # 5
$compteur += 2; # 7
$compteur -= 1; # 6
$compteur /= 2; # 3
$compteur .= " petits cochons"; # "3 petits cochons"

$compteur = 4;
$compteur++;   # 5
++$compteur;   # 6
$compteur--;   # 5
--$compteur;   # 4

# pré/post-incrémentation
my $compteur = 4;
print $compteur++; # affiche 4
print $compteur;   # affiche 5
print ++$compteur; # affiche 6

Voir aussi