FAQ PerlConsultez toutes les FAQ

Nombre d'auteurs : 18, nombre de questions : 250, dernière mise à jour : 29 octobre 2015  Ajouter une question

 

Bienvenue sur la FAQ Perl. Cette FAQ a pour vocation de vous enseigner ou de vous faire revoir les notions élémentaires de ce fantastique langage. Perl est très utilisé dans différents domaines depuis la gestion système, le réseaux, l'administration de bases de données, le web (CGI), la bureautique, la conception d'interfaces graphiques ou des contextes scientifiques telle la bioinformatique. Nous espérons que cette FAQ vous sera d'une grande utilité.

Vous souhaitez participer à l'amélioration de cette FAQ, n'hésitez pas !! Commentez

Bonne lecture !


SommairePerl avancéLes modulesExemple d'utilisation de quelques modules (2)
précédent sommaire suivant
 

Le module DBI (database interface) permet de faire des connexions à une ou plusieurs bases de données telles Mysql, Postgresql, Oracle, Sybase... De ce fait, il vous sera possible d'intégrer des requêtes SQL dans vos scripts.
Petit rappel : n'oubliez pas d'installer le module DBI et le driver. Voici une liste de commandes à inclure dans le code Perl pour l'accès aux bases de données.

Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use DBI; 
  
# En début du programme, il permet de faire appel au module DBI et 
# spécifie qu'on va faire un accès aux bases de données. 
$db = DBI->connect( "dbi:mysql:toto", 'login', 'mot_de_passe' ); 
  
# Requêtes du genre "create...", "update...", "insert into..." => $db->do("requête"); 
$db->prépare("requête"); # préparation de la requête 
$db->exécute(); # exécution de la requête 
$db->fetchrow_array(); # ligne retournée par la requête (ou lignes dans une boucle) 
$db->finish(); # fin de la requête 
# Requêtes du genre "select..." Dans ce cas, 4 étapes doivent être exécutées : 
# Connexion à une base de données mysql s'appelant "toto" et dont l'accès nécessite un  
# login et mot de passe. Exécution d'une requête SQL. En fonction du type de requête,  
# la syntaxe n'est pas la même. On différentie deux types d'écriture. 
$db->disconnect; # pour se déconnecter de la base de données en fin de programme.
Exemple: Insertion d'une ligne dans une table sql et récupération de données.

Code : Sélectionner tout
1
2
3
4
5
6
titre        |acteur   |jour 
--------------------------------- 
|shrek        |eddy     |lundi   | 
|couleur      |hopkins  |mardi   | 
|coup_foudre  |robert   |mercredi| 
---------------------------------
Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/perl 
use strict; 
use warnings; 
  
use DBI; 
  
#connexion à la base de données postgresql premieredb 
my $dbp = DBI->connect( "dbi:Pg:dbname=premieredb", "login", "mot_de_passe" ) 
  or die "connexion impossible !"; 
  
#insertion d'une donnée 
$dbp->do("insert into film values ('test_titre', 'test_acteur','test_jour');") 
  || die "pb de requête : $DBI::errstr"; 
  
#requete postgresql 
my $requete = "select acteur, jour from film;"; 
  
#prépare la requête sql 
my $version = $dbp->prepare($requete); 
  
#exécution de la requête sql 
$version->execute() || die "pb de sélection : $DBI::errstr"; 
  
while ( my ( $acteur, $jour ) = $version->fetchrow_array ) { 
  print "result: $acteur du jour $jour\n"; 
} 
  
#spécifie la fin de la requête 
$version->finish(); 
  
# déconnexion à la base de données 
$dbp->disconnect();
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
result: eddy du jour lundi 
result: hopkins du jour mardi 
result: robert du jour mercredi 
result: test_acteur du jour test_jour 
nouvelle table 
 titre        |acteur     |jour 
------------------------------------ 
|shrek        |eddy       |lundi    | 
|couleur      |hopkins    |mardi    | 
|coup_foudre  |robert     |mercredi | 
|test_titre   |test_acteur|test_jour| 
------------------------------------

Mis à jour le 9 mai 2005 djibril

Le module CGI (Common Gateway Interface) est particulièrement utile pour l'écriture de pages Web au format HTML mais surtout à la récupération et au traitement de données provenant de formulaires. Prenons un exemple simple. Soit la page HTML suivante notée accueil.html :

Code html : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
<HTML> 
<BODY> 
Rentrez votre prénom : <BR> 
<FORM NAME="form" ACTION="/cgi-bin/script.pl" 
METHOD="POST"> 
<INPUT TYPE="text" NAME="prenom"> 
<INPUT TYPE="submit" VALUE="Envoyer"> 
</FORM> 
</BODY> 
</HTML>
Dans cette page, on crée un formulaire contenant un champ de texte à compléter. Le deuxième élément est le bouton de soumission des données vers le script pointé par la clause ACTION du formulaire. Il s'agit de notre script Perl nommé script.pl et se situant dans le répertoire cgi-bin de notre serveur Web (notre page aurait pu aussi s'appeler script.cgi mais n'oubliez pas de modifier votre lien dans la page précédente) :

Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl 
use strict; 
use warnings; 
use CGI; 
  
my $cgi = new CGI; 
  
# Création de l'entête de la page web 
print $cgi->header(); 
print $cgi->start_html( -title => 'Titre de ma page', ); 
  
# Recupération du prénom 
my $prenom = $cgi->param("prenom"); 
print "Bonjour, votre pr&eacute;nom est : <b>$prenom</b><br><br>\n\n"; 
print "Merci"; 
  
# Fermeture de la page web 
print $cgi->end_html;
Exemples d'erreurs :

Il arrive souvent que vous ayez ce message : Internal Server Error.
Ceci indique qu'il y a une erreur dans votre script CGI. Le premier réflexe à avoir est d'aller regarder ses fichiers log.
Le chemin vers le fichier log est indiqué dans le fichier de configuration de votre Apache. C'est le fichier httpd.conf, apache.conf ou apache2.conf... tout dépend du serveur Apache que vous avez installé.

Sous EasyPHP :
  • Fichier de configuration : C:\Program Files\EasyPHPX-X\conf_files\httpd.conf ;
  • fichier log : C:\Program Files\EasyPHPX-X\apache\logs\error.log.

Sous Linux :
  • Fichier de configuration : faites un find httpd.conf ou find apache.conf ou apache2.conf ;
  • fichier log : c'est souvent /var/log/apache(2)/errors.log.

A vous de chercher.

Lisez le fichier log, et essayez de comprendre le message d'erreur Perl.
Pensez à vérifier que l'entête HTML est bien créé dans votre script CGI, que les fins de lignes de vos programmes sont bien des retours chariots Linux et non Windows ( Compatibilité Unix/Mac/Linux/Windows des fichiers (^M)).

Les erreurs les plus fréquentes que l'on peut trouver lors d'une demande d'ouverture de page web :
  • erreur 400 : mauvaise requête (Bad request) ;
  • erreur 401 : autorisation refusée (Authorization) ;
  • erreur 403 : répertoire interdit (Forbidden) ;
  • erreur 404 : fichier non trouvé (File not found) ;
  • erreur 500 : erreur de configuration (Internal server error).

Mis à jour le 9 mai 2005 djibril GLDavid

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsable bénévole de la rubrique Perl : djibril -