<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META name="generator" content="HTML Tidy, see www.w3.org"> <!-- this stylesheet will later on be added by lfparser automatically: --> <STYLE type="text/css"> <!-- pre { font-familiy:monospace,Courier } p.code { width:80%; alignment:center; background-color:#aedbe8; border-style:no ne; border-width:medium; border-color:#aedbe8; padding:0.1cm ; text-align:left } --> </STYLE> </HEAD> <BODY> <H1>MySQL et Perl, le mariage de raison</H1> <H4>ArticleCategory:</H4> Applications <H4>AuthorImage:</H4> <IMG src="../../common/images/Georges-Tarbouriech.jpg" width= "115" height="124" alt="Georges Tarbouriech"> <H4>TranslationInfo:[Author and translation history]</H4> <P>original in en <A href="mailto:georges.t@linuxfocus.org">Georges Tarbouriech</A> </P> <P>en to fr <A href="mailto:georges.t@linuxfocus.org">Georges Tarbouriech</A> </P> <H4>AboutTheAuthor</H4> <P>Georges est un vieil utilisateur d'Unix. Il appr�cie tous ces produits qui ont contribu� � r�pandre les solutions bas�es sur le logiciel libre dans le domaine professionnel.</P> <H4>Abstract:</H4> <P>MySQL et Perl font partie du paysage depuis d�j� longtemps. Ils sont toujours largement utilis�s m�me si la "mode" est en train de changer. Cet article parle de ces deux produits utilis�s conjointement soit sur Internet, soit sur votre r�seau local. L'exemple propos� concerne les syst�mes Unix, libres ou non, m�me s'il peut �tre adapt� � d'autres "syst�mes" largement r�pandus. <br> Ce qu'est cet article : un petit tour d'horizon de ce que l'on peut faire avec ce couple, en insistant sur la facilit� d'utilisation, la rapidit�, la fiabilit�, la s�curit�... <br> Ce que cet article n'est pas : ni un tutoriel MySQL ou Perl, ni une pr�sentation approfondie de MySQL ou Perl.<br> Par cons�quent, nous y verrons MySQL au travail en liaison avec Perl, sans oublier "qu'il y a plus d'une fa�on de le faire". </P> <H4>ArticleIllustration:</H4> <IMG src="../../common/images/article226/mysqlandperl.png" width="167" height="87" alt="MySQL and Perl" hspace="10"> <H4>ArticleBody:[The article body]</H4> <H2>Quid de ce couple sympathique ?</H2> <P> <b>MySQL</b> est un Syst�me de Gestion de Bases de Donn�es Relationnelles (SGBDR) disponible sur <A href= "http://www.mysql.com">http://www.mysql.com</A>. Il est publi� sous licence GNU GPL gratuitement en fonction de l'usage pour lequel il est pr�vu. V�rifiez la politique de licence sur le site de MySQL. Il fonctionne en tant que client ou serveur sur de nombreuses plate-formes. D'autres SGBDR libres existent et nous ne ferons aucune comparaison puisque le choix de MySQL pour cet article est purement arbitraire. De m�me nous ne comparerons pas avec les "gros" produits commerciaux tels qu'Informix, Oracle, Sybase... Pr�cisons toutefois que MySQL est probablement l'un des SGBD les plus utilis�s sur Internet. Pour cet article nous avons choisi (toujours arbitrairement) la version 3.23.36. Au moment d'�crire ces lignes, la derni�re version stable est la 3.23.46 et la version exp�rimentale est la tant attendue version 4.0. Tout ceci peut �tre t�l�charg� sous forme de code source � compiler ou sous forme de paquetage. <br> Pour utiliser MySQL avec Perl, vous aurez besoin d'autre chose : les modules DBI de Perl. Vous devez au moins t�l�charger DBI, Msql-Mysql-modules, Data-Dumper et Data-ShowTable. <br> Nous ne parlerons pas de leur installation puisqu'elle est �vidente et que les distributions vous fournissent tout ce que vous avez besoin de savoir. <br> <b>Perl</b> signifie Practical Extraction and Report Language. Au tout d�but il �tait destin� � la manipulation de document (analyse, extraction...) mais il est rapidement devenu beaucoup plus que �a. Vous pouvez pratiquement tout faire avec Perl, depuis les t�ches d'administration aux scripts cgi, en passant par de v�ritables applications et bien s�r, l'interfa�age de bases de donn�es. <br> Perl fait partie de nombreuses (sinon toutes) distributions Unix, qu'elles soient libres ou non. La version stable actuelle est la 5.6.1 et l'exp�rimentale est la 5.7.2 au moment d'�crire ces lignes. Pour cet article nous utiliserons la bonne vieille 5.005_03. Si Perl n'est pas install� sur votre machine (comment est-ce possible ?), vous pouvez l'obtenir sur <A href= "http://www.perl.com">http://www.perl.com</A>. Perl propose des tonnes de modules pour pratiquement tout. Vous pouvez les obtenir � partir de la section CPAN de ce m�me site : une mine d'or ! <br> Dernier point et non le moindre, pour travailler avec les deux outils r�unis, surprise : il vous faut un serveur web ! Apache semble le bon choix puisqu'il fait partie de nombreuses distributions Unix. Si vous ne l'avez pas (o� avez-vous trouv� votre distribution ?), il est disponible � <A href= "http://www.apache.org">http://www.apache.org</A>. </p> <H2>L'exemple utilis�</H2> <p> Vous avez sans doute remarqu� que LinuxFocus est un magazine multilingue. Ca signifie que lorsque vous �tes un �diteur, vous devez g�rer le statut des nouveaux articles, leur traduction. En d'autres termes, qui fait quoi, quand... Actuellement, il y a environ 200 articles, traduits en moyenne en 5 langues. Ce qui fait un millier d'articles (que je suis bon !) et �a augmente tous les mois ! Tout cela doit �tre archiv�, format�, r�capitul�... Comment croyez-vous que cette gestion fonctionne ? Gr�ce � Perl, bien s�r. <br> Notre �diteur en chef, Guido Socher, a �crit de nombreux programmes en Perl pour nous faciliter la t�che. Il a �galement �crit un tutoriel Perl en trois parties ainsi que la pr�sentation d'un livre sur Perl. Voir la partie "R�f�rences" � la fin de l'article. <br> Javi, l'�diteur Espagnol, a �crit un programme pour g�rer l'avancement des traductions... en Perl. <br> Atif, l'un de nos auteurs �toile, vient du royaume de Perl, et c'est pour cela que sa langue maternelle... est Perl. Accessoirement, il a �galement contribu� � MySQL, en am�liorant un outil d'administration web. Voir �galement la partie R�f�rences. <br> Tout cela pour dire que si vous cherchez un paradis Perl... rejoignez LinuxFocus. <br> Comme je suis l'un des �diteurs Fran�ais... et que je suis plut�t paresseux, j'ai cr�e ma propre base de donn�es LinuxFocus en utilisant, devinez quoi : MySQL et Perl ! </p> <H2>Cr�ation de la base</H2> <p> Cela suppose que MySQL a �t� correctement install�, que des utilisateurs ont �t� cr�es et ont �t� prot�g�s par des mots de passe. L'installation n'entre pas dans le cadre de cet article et la documentation d'excellente qualit� fournie avec MySQL vous dira tout. <br> D�marrez le serveur MySQL � l'aide du script <i>mysql.server</i>, puisqu'il invoque le d�mon <i>safe_mysqld</i> auquel vous pouvez passer des options. Connectez-vous au serveur en tapant <p class="code"> mysql -h host -u user -p</p>. Si le serveur est sur votre machine, <i>-h host</i> est inutile. <br> Apr�s avoir tap� le mot de passe, vous �tes connect� au serveur (enfin, vous devriez !). Et vous pouvez maintenant cr�er votre base de donn�es. <br> Au prompt mysql, tapez <p class="code">CREATE DATABASE lf;</p> Il s'agit de notre exemple (lf pour LinuxFocus) et il est �vident que vous donnez le nom de votre choix � votre propre base. Ensuite, garantissez certaines permissions aux utilisateurs autoris�s, en supposant que vous ayez le droit de le faire (c'est-�-dire que l'utilisateur connect� poss�de des droits d'administrateur). Si vous souhaitez qu'un utilisateur puisse g�rer la base, vous pouvez lui en donner les privil�ges en tapant <p class="code"> GRANT ALL ON lf.* TO username;</p> S�lectionnez la base que vous venez de cr�er en tapant <p class="code"> USE lf</p>. Cr�ez une table en fonction de vos besoins. Dans notre exemple, nous d�finissons une table nomm�e trissue <p class="code"> CREATE TABLE trissue (num INTEGER UNSIGNED, category VARCHAR(25), title VARCHAR(40), author VARCHAR(20), en VARCHAR(20), es VARCHAR(20), fr VARCHAR(20),de VARCHAR(20), nl VARCHAR(20), ru VARCHAR(20), tk VARCHAR(20), issue VARCHAR(20));</p>. V�rifions qu'elle correspond bien � ce que l'on attend avec : <p class="code"> USE lf<br> SHOW TABLES; <br> DESCRIBE trissue;</p> C'est tout. <br> Maintenant, il nous faut des donn�es. Pour int�grer des donn�es dans une table vide, le moyen le plus simple consiste � utiliser un fichier texte avec des tabulations en guise de s�parateurs. Lorsque votre texte est pr�t, tapez : <p class="code"> LOAD DATA LOCAL INFILE "maindb.txt" INTO TABLE trissue;</p> Si votre fichier texte est correct, la table est maintenant peupl�e. Vous pouvez le v�rifier par : <p class="code"> SELECT * FROM trissue;</p> Ceci devrait afficher une longue liste. Vous pouvez d�s lors retrouver n'importe quelle donn�e � l'aide de requ�tes. <br> Jusque l�, �a va.<br> Nous n'avons utilis� que MySQL qui nous a permis de tout faire. Alors, que vient faire Perl l�-dedans ? </p> <H2>Perl au travail</H2> <p> Perl va nous aider � automatiser les requ�tes, � afficher les r�sultats dans un navigateur web, etc. Encore une fois, ceci implique que les modules Perl ont �t� correctement install�s pour permettre l'utilisation de MySQL en liaison avec Perl. <br> Nous allons maintenant �crire des scripts Perl utilis�s en tant que scripts cgi. Ils vont nous permettre de m�ler Perl et HTML pour interroger la base et formater le r�sultat. <br> Nous ne traiterons que d'un simple exemple de script, nous autorisant � rechercher tous les articles d'un m�me auteur. Nous afficherons les num�ros des articles, la cat�gorie, le titre, les noms des traducteurs des diff�rentes langues (uniquement celles des projets �tablis), et le mois de parution de l'article. <br> Vous pouvez utiliser ce script comme mod�le pour votre usage personnel, mais sachez que cet exemple n'est pas un programme particuli�rement s�curis�. Vous pouvez obtenir une version un peu plus comment�e <A href= "../../common/src/article226/lfperl.txt">=>ici<=</a>. <br><br> <p class="code"> #!/usr/bin/perl -Tw <br> # D'abord, disons qu'il s'agit d'un script Perl "Tainted". <br> # <br> # Ceci est un commentaire <br> # consultation de la base <br> # <br> # Utilisons le module Perl DBI <br> use DBI; <br> <br> # en tant que cgi : <br> use CGI qw(param()); <br> <br> print <<END_of_start; <br> <br> Content-type: text/html <br> <br> <html> <br> <title>LFAuthors main db</title> <br> <br> <center><TABLE> <br> <TR VALIGN=TOP> <br> <TD><form action="/cgi-bin/lf.cgi" method="get"> <br> <br> # Voici le titre du bouton de la page de lancement <br> <input type="submit" value=" LFAuth "> <br> </form> <br> </TD> <br> </TR> <br> </TABLE> </p> Nous demandons maintenant au script d'interroger la base <p class="code"> <center><H2>Search by author</H2></center> <br> <br><form action=\"/cgi-bin/lf.cgi\" method=\"get\">Author name : <input <br>type=\"text\" size=\"30\" name=\"author\"><input type=\"submit\" <br>value=\"Search...\"></form></center> <br> <br> <br>END_of_start <br> <br> <br>if (param("author") ne '') { <br> $author = param("author"); <br> <br> $autsrch.='"'; <br> $autsrch.=$author; <br> $autsrch.='"'; <br> <br># Nous nous connectons � la base nomm�e lf en tant qu'utilisateur untel <br> <br> $dbh = DBI->connect("DBI:mysql:lf","untel",''); <br> <br> $sth = $dbh->prepare(" <br> select * <br> from trissue <br> where <br> author = $autsrch <br> "); <br> <br> $sth->execute; </p class="code"> Nous demandons maintenant au script de pr�parer et d'afficher les r�sultats de la requ�te. Soit le champ de recherche est vide et le contenu de la base est affich� en totalit�, soit nous recherchons un nom et chaque article correspondant � cet auteur sera affich�. Si vous avez des milliers d'enregistrements dans votre base, je vous d�conseille l'affichage de la totalit� du contenu ! <br> <p class="code"> print <<END_suite; <br> <br><center> <br><TABLE BORDER=> <br><tr bgcolor=#A1C4EE> <br><th width=60 align=CENTER><font color=#000000> Num </font></th> <br><th width=110 align=CENTER><font color=#000000> Category </font></th> <br><th width=110 align=CENTER><font color=#000000> Title </font></th> <br><th width=110 align=CENTER><font color=#000000> Author </font></th> <br><th width=110 align=CENTER><font color=#000000> En </font></th> <br><th width=110 align=CENTER><font color=#000000> Es </font></th> <br><th width=110 align=CENTER><font color=#000000> Fr </font></th> <br><th width=110 align=CENTER><font color=#000000> De </font></th> <br><th width=110 align=CENTER><font color=#000000> Nl </font></th> <br><th width=110 align=CENTER><font color=#000000> Ru </font></th> <br><th width=110 align=CENTER><font color=#000000> Tk </font></th> <br><th width=110 align=CENTER><font color=#000000> Issue </font></th> <br> </tr> <br> <br>END_suite <br> <br>while( ($num,$category,$title,$author,$en,$es,$fr,$de,$nl,$ru,$tk,$issue) =$sth->fetchrow() ) { <br>print "<tr>"; <br>print "<td width=60 bgcolor=#FFFFE8 align=center> $num</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $category</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $title</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $author</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $en</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $es</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $fr</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $de</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $nl</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $ru</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $tk</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $issue</td>"; <br>print "</tr>"; <br> <br> } <br> print "</TABLE>"; <br> print "<BR>"; <br> print "<BR>"; <br> print "<br>"; <br> <br> <br>} else { <br> <br># Connexion � la base <br> <br> $dbh = DBI->connect("DBI:mysql:lf","untel",''); <br> <br> <br># Recherche <br> <br> $sth = $dbh->prepare(" <br> select * <br> from trissue <br> "); <br> <br> $sth->execute; <br> <br> <br># Affichage du r�sultat <br> <br> <br>print <<SUITE; <br> <br><center> <br><TABLE BORDER=> <br><tr bgcolor=#A1C4EE> <br><th width=60 align=CENTER><font color=#000000> Num </font></th> <br><th width=110 align=CENTER><font color=#000000> Category </font></th> <br><th width=110 align=CENTER><font color=#000000> Title </font></th> <br><th width=110 align=CENTER><font color=#000000> Author </font></th> <br><th width=110 align=CENTER><font color=#000000> En </font></th> <br><th width=110 align=CENTER><font color=#000000> Es </font></th> <br><th width=110 align=CENTER><font color=#000000> Fr </font></th> <br><th width=110 align=CENTER><font color=#000000> De </font></th> <br><th width=110 align=CENTER><font color=#000000> Nl </font></th> <br><th width=110 align=CENTER><font color=#000000> Ru </font></th> <br><th width=110 align=CENTER><font color=#000000> Tk </font></th> <br><th width=110 align=CENTER><font color=#000000> Issue </font></th> <br> </tr> <br> <br>SUITE <br> <br>while( ($num,$category,$title,$author,$en,$es,$fr,$de,$nl,$ru,$tk,$issue) =$sth->fetchrow() ) { <br>print "<tr>"; <br>print "<td width=60 bgcolor=#FFFFE8 align=center> $num</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $category</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $title</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $author</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $en</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $es</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $fr</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $de</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $nl</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $ru</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $tk</td>"; <br>print "<td width=110 bgcolor=#FFFFE8 align=left> $issue</td>"; <br>print "</tr>"; <br> <br> } <br> print "</TABLE>"; <br> print "<BR>"; <br> <br>} <br>print end_html; <br>$sth->finish; <br> <br> <br># D�connexion <br> <br>$dbh->disconnect; <br> <br>exit; </p> <br> Voici le r�sultat obtenu dans un navigateur : <br><br> <P><center><A HREF="../../common/images/article226/query.jpg"><IMG SRC="../../common/images/article226/queryth.jpg" ALT="query"></A></center> <br><br> C'est tout fini ! </p> <H2>Du c�t� s�curit�</H2> <p> De toute �vidence, si vous souhaitez proposer un service de base de donn�es sur votre site, vous devez s�curiser l'ensemble. Bien s�r, nous ne fournirons pas de m�thode pas � pas pour s�curiser votre site ou votre serveur de bases de donn�es. Toutefois, il est important d'insister sur ce qui est basique. <br> En bref, lorsque vous proposez des services sur Internet, la premi�re chose � faire consiste � s�curiser votre serveur web. Ceci est tr�s loin du cadre de cet article. Si vous voulez en savoir plus sur le sujet, il existe une �norme documentation. Un bon endroit pour commencer n'est autre que <A href= "http://www.linuxdoc.org">le Linux Documentation Project</A>. <br> L'�tape suivante concerne le serveur de bases de donn�es. Lorsque vous installez un outil tel que MySQL, n'oubliez pas de lire le chapitre s�curit� du manuel. Encore une fois, le travail de base concerne les mots de passe des utilisateurs : ne laissez jamais un compte sans mot de passe, particuli�rement celui de root (qui devrait �tre diff�rent de celui de la machine). L'autre point important concerne les permissions : n'autorisez pas tout � tout le monde. Cela para�t �vident... et c'est la raison pour laquelle nombreux sont ceux qui l'oublient ! <br> Pour aller un peu plus loin, pourquoi ne pas "chrooter" la base ? Lisez l'article de <A href= "article225.shtml">Mark</a> "Chrooter tous les services" dans ce num�ro. Il y parle d'une autre base mais ce qu'il dit peut �tre appliqu� � MySQL. <br> Une autre mesure de s�curit� concerne la circulation des donn�es. Ce n'est pas une mauvaise id�e d'envoyer et de recevoir les donn�es par un canal s�curis�. Vous pouvez lire l'article <A href= "../May2001/article202.shtml">Par le tunnel</a> pour plus ample information. <br> Enfin, l'essentiel, la programmation s�curis�e est l'une des cl�s. Perl est un langage extraordinaire mais il est tr�s facile de faire de grosses erreurs de programmation avec lui. Un autre article de LinuxFocus vous dira ce qu'il faut faire, particuli�rement avec Perl. Jetez un oeil (et m�me les deux) <A href= "../November2001/article203.shtml">l�</a>. C'est le dernier article de la s�rie sur la programmation s�curis�e et il concerne plus sp�cialement les scripts cgi. A lire absolument ! <br> Alors, bien s�r, tout ceci suppose que votre syst�me est d�j� s�curis�, sans trous de s�curit� bien connus, avec tous les derniers correctifs, et avec de nombreux outils de s�curit� obligatoires tels qu'un NIDS (Network Intrusion Detection System) comme snort (<A href= "http://www.snort.org">http://www.snort.org</a>), un pare-feu, des scanners de ports et de s�curit� (<A href= "http://www.insecure.org">nmap</a>, <A href= "http://www.nessus.org">nessus</a>), etc. <br> Si vos moyens vous le permettent, vous pouvez aussi avoir un serveur diff�rent pour chaque service propos� : un serveur web, un serveur de bases de donn�es... et leur miroir pour garantir une haute disponibilit�. Ainsi de suite ! Ce n'est jamais fini, puisque la s�curit� n'est jamais aboutie. Vous essayez seulement de r�duire les risques... et ils sont tous les jours plus gros. Vous voil� avertis. </p> <H2>Quoi d'autre ?</H2> <p> Comme Il Y a toujours Plus d'Une Fa�on de Le Faire (TIMTOWDI c'est quand m�me plus parlant que IYPUFDLF), vous pouvez choisir celle qui vous convient le mieux. Il existe de nombreux SGBDR ainsi que de nombreux langages pour communiquer avec eux. L'id�e derri�re cet article �tait de montrer que MySQL et Perl fonctionnent vraiment bien ensemble. <br> Certes, le choix �tait enti�rement subjectif : j'adore MySQL pour sa relative petite taille, parce qu'il fonctionne sous de nombreux OS, qu'il est rapide, fiable... J'appr�cie �galement beaucoup le travail de l'�quipe de MySQL, sans oublier les nombreux contributeurs. Et ce que pr�f�re : ces gens n'ont pas essay� de r�inventer la roue. Ils ont conserv� la simplicit�. <br> Pour ce qui est de Perl, tout a �t� dit : que pourrais-je ajouter ? Je crois vraiment qu'il est impossible de travailler sans lui, que vous soyez administrateur r�seau, d�veloppeur ou que sais-je. La communaut� Perl est l'un des si�ges du partage des connaissances. Un magazine existe, nomm� le Perl Journal, qui est maintenant int�gr� au magazine SysAdmin, tous les deux num�ros. Si vous voulez vous abonner, visitez <A href= "http://www.samag.com">http://www.samag.com</a>. <br> Puisque nous parlons de beau travail, voici l'habituelle partie hors-sujet. Vous, lecteurs de LinuxFocus, n'avaient sans doute pas remarqu� le petit nombre de personnes investies dans le magazine. Pourtant, vous pouvez le lire dans de nombreuses langues. Avez-vous remarqu� que certaines �quipes travaillent presque toujours avec une ou deux personnes qui font tout ? Ils sont traducteurs, webmestres, etc. Regardez du c�t� de l'�quipe Russe ou de l'�quipe Turque : vous verrez que la plupart des articles sont traduits par Kirill ou Erdal. Jetez un oeil sur les projets en cours de d�veloppement, tels que le Portugais ou l'Arabe : m�me r�sultat ! J'aimerais les f�liciter pour l'�norme travail r�alis�. Merci � vous tous : la communaut� du logiciel libre peut vous �tre reconnaissante. <br> Pardon pour la digression, mais je crois qu'il fallait que ce soit dit. <br> Pour en revenir au sujet, terminons par quelques mots sur le logiciel libre. Les gens de MySQL et de Perl m�ritent un grand merci. Ils nous fournissent des outils extraordinaires, presque toujours gratuitement. Pourtant ces outils sont souvent aussi "bons" que les v�ritables produits commerciaux (sinon meilleurs), ils sont fr�quemment mis � jour, tr�s bien document�s et vous pouvez les utiliser sur la plupart des syst�mes Unix. Connaissez-vous un �quivalent ailleurs ? J'ai bien peur que non ! <br> Cet article ne vous apprendra sans doute pas grand chose, mais s'il vous donne envie d'essayer ces produits, il n'aura pas �t� inutile. <br> Quand je vous dis qu'on vit une �poque formidable ! </p> <H2>R�f�rences</H2> <p> <A href="http://www.perl.org">Perl mongers</a> <br><br> Le tutorial Perl de Guido : <br><br> <A href="../September1999/article114.html">Perl I</a> <br> <A href="../November1999/article126.html">Perl II</a> <br> <A href="../January2000/article136.shtml">Perl III</a> <br><br> Revue du livre Programmation Professionnelle de Perl : <br><br> <A href="../July2001/article208.shtml">Programmation avec Perl</a> <br><br> <A href="http://www.mysql.com/downloads/download.php?file=Downloads/Contrib/mysqladmin-atif-1.0.tar.gz">La contribution d'Atif</A> � MySQL. <br><br> Une revue de MySQL sur LinuxFocus : vieil article encore d'actualit� : <br><br> <A href="../July1998/article59.html">MySQL</a> <br><br> Un vieux tutoriel SQL en deux parties sur LinuxFocus : <br><br> <A href="../May1998/article38.html">SQL Partie I</a> <br> <A href="../July1998/article58.html">SQL Partie II</a> <!-- vim: set sw=2 ts=2 et: --> </BODY> </HTML>