Copyright ©AlFrog 2000
Accueil Bios et drivers Palette des 216 couleurs      
Yam Perl - Aide mémoire Fractale de Mandelbrot      
La météo en Sarthe

Perl - Aide mémoire

Expressions régulières

Exemple d'introduction :

Syntaxe : chaîne =~ /expression/

Exemple : if ($nom =~ /^[Aa]lf/) {print "OK";}

L'exemple ci-dessus affiche Ok si le nom est 'alf', 'Alf', 'alfred',...
L'opérateur conditionnel =~ signifie [ressemble à].
^ signifie [commence par].

Si on rajoute i derrière l'expression les majuscules et les minuscules ne sont pas différenciées : if ($nom =~ /^alf/i) {print "OK";}
Le contraire de l'opérateur =~ est !~ qui signifie [ne ressemble pas à ...] : if ($nom !~ /^alf/i) {print "BAD";}

Rappels :

Une expression régulière est un motif de recherche, constitué de :

- Un caractère

- Un ensemble de caractères :
[a-z] tout caractère alphabétique
[aeiouy] toute voyelle
. tout caractère sauf fin de ligne
[a-zA-Z0-9] tout caractère alphanumérique
Le caractère ^ au début d'un ensemble signifie « tout sauf » ([^0-9] : tout caractère non numérique)
Un caractère spécial:
\n [retour-chariot].
\t [tabulation].
^ [début de ligne].
$ [fin de ligne].
\w [un mot].
\s [un espace].
\W [tout sauf un mot].
\S [tout sauf un espace].

- Quelques opérateurs :
? 0 ou 1 fois.
* 0 ou n fois.
+ 1 ou n fois.
| ou (inclusif).

{n,m} qui signifie de n à m fois.

Remarque :
Si l'on veut qu'un caractère spécial apparaisse tel quel, il faut le précéder d'un \, les caractères spéciaux sont : ^ | ( ) [ ] { } \ / $ + * ? .

Exemple: if (/\(.*\)/) {print;} affiche les lignes contenant des parenthèses

Attention :
le caractère spécial ^ a deux significations différentes :
1. dans un ensemble il signifie [tout sauf]
2. en dehors il signifie [commence par]


Manipulation de fichiers

exemple 1 : Lecture d'un fichier et affichage

#!/usr/bin/perl

open(IN,"monfichier.txt") || die ('Erreur d\'ouverture du fichier');
while(<IN>)
{
  print $_."\n"; # On affiche la ligne contenue dans la variable d'environnement $_
}
close(IN);

exit 0;

exemple 2 : Ecriture dans un fichier

#!/usr/bin/perl

@T=(10,2,3,6,"res");
open(OUT,">>monfichier.txt") || die ('Erreur de création du fichier');
# > Ouverture en écriture avec écrasement du fichier si il existe
# >> Ouverture en écriture avec ajout au fichier
for($i=0;$i<length(@T);$i++)
{
  print OUT $T[$i]."\n"; # On écrit la ième ligne du tableau dans le fichier
}
close(OUT);

exit 0;

exemple 3 : Renommer tous les fichiers d'un répertoire

#!/usr/bin/perl

chdir('/home/mesfichiers') || die ("Erreur changement de répertoire \n");
foreach(<*.jpg>)
{
  rename($_,"file_".$_) || die ("Impossible de renomer");
  # On rajoute à tous les fichiers le préfixe file_
}

exit 0;

Fonctions perl utiles

sort : trie une liste et retourne la liste triée

tri ascendant : @articles = sort {$a <=> $b} @files;
tri descendant : @articles = sort {$b <=> $a} @files;
pour un tableau à 2 dimensions : @articles = sort {$a->[$n] <=> $b->[$n]} @files;
# $n : numéro de la colonne à trier

split : éclate une chaîne

syntaxe : split(/PATTERN/,EXPR,LIMIT)
# PATTERN : délimiteur (par exemple \t)
# EXPR : expression à découper (par exemple $_)
# LIMIT : nombre max d'éléments du tableau à remplir
exemple : @ligne=split(/\t/,$_);

Perl & CGI

exemple 1 : Récupération et affichage des données d'un formulaire

Document html :

<HTML><HEAD></HEAD>
<BODY>
<form name="infos" action="/cgi-bin/infos.pl">
<input type="text" name="nom"><br>
<input type="text" name="prenom"><br>
<input type="text" name="age" maxlength=3 size=3><br>
<input type="submit" value="Valider"><br>
</form>
</BODY>
</HTML>


Document perl :

#!/usr/bin/perl

require "cgi-lib.pl";
&ReadParse(*in);
print &PrintHeader;
print "<html><head></head><body>";
print "Votre nom est : ".$in{'nom'}."\n";
print "Votre prénom est : ".$in{'prenom'}."\n";
print "Vous avez ".$in{'age'}." ans\n";
print "</body></html>";

exit 0;

Perl & Javascript

exemple 1 : Redirection vers un fichier perl

parent.location="/cgi-bin/monfichier.pl";

Perl & Bases de données MySQL

exemple 1 : Lecture d'une table et affichage

#!/usr/bin/perl

use DBI;

$dbh = DBI->connect( "dbi:mysql:database=mabase","root",""); # pour MySQL
# paramètres : nom de la base, login, password
# $dbh = DBI->connect( "dbi:ODBC:route","",""); # pour ODBC
# $dbh = DBI->connect( "dbi:Pg:dbname=route120","postgres",""); # pour PostgreSQL

$sth = $dbh->prepare("SELECT * FROM matable");
$sth->execute();

while (@ln=$sth->fetchrow_array())
{
  for($i=0;$i<length(@ln);$i++)
  {
    print $ln[$i]."\t";
  }
  print "\n";
}

$sth->finish;

exit 0;

exemple 2 : Ecriture dans une table

#!/usr/bin/perl

use DBI;

$dbh = DBI->connect( "dbi:mysql:database=mabase","root",""); # pour MySQL
#$dbh = DBI->connect( "dbi:ODBC:route","",""); # pour ODBC
#$dbh = DBI->connect( "dbi:Pg:dbname=route120","postgres",""); # pour PostgreSQL

$nom="dupont";
$prenom="eric";
$age=22;

$sth = $dbh->prepare("INSERT INTO matable VALUES (?,?,?)");
$sth->execute($nom,$prenom,$age);

$sth->finish;

exit 0;