Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[FAQ] [fr.comp.lang.perl]

2 réponses
Avatar
Samuel Mouniee
==== La documentation sur Perl ====


== O trouver de la documentation sur Perl ? ==

La documentation de Perl est fournie avec perl, au format POD.
Elle est accessible en ligne de commande (shell ou boite dos) via
perldoc <nom rubrique>. La documentation est dcoupe par grands
thèmes, comme la scurit (perldoc perlsec) , les fonctions du
langage Perl (perldoc perlfunc), etc ... Un bon dbut est perldoc
perl.

Vous pouvez effectuer une recherche sur l'ensemble des FAQ,
utilisez l'option -q. Exemple, recherchez CGI dans la FAQ :
perldoc -q CGI. Voici la liste des thèmes :

* perlfaq1 - Questions d'ordre gnral sur Perl
* perlfaq2 - Trouver et apprendre Perl
* perlfaq3 - Outils de programmation
* perlfaq4 - Manipulation de donnes
* perlfaq5 - Fichiers et formats
* perlfaq6 - Expressions rationnelles
* perlfaq7 - Problèmes du langage Perl
* perlfaq8 - Interaction avec le système
* perlfaq9 - Rseau

Pour obtenir la documentation d'une fonction Perl, utilisez
l'option -f. Par exemple, le dtail de la fonction stat s'obtient
avec perlfaq -f stat.

Voir question suivant pour la version franaise et une description
plus dtaille des diffrents thèmes. Excepte perldoc, il existe
galement de nombreuses documentations sur Perl. Google peut vous
aider les retrouver.


== Existe-t-il une traduction de la documentation Perl ? ==

Oui ! Cependant, certaines parties ne sont pas encore traduites.
Voir <http://www.enstimac.fr/Perl/>.


== Quelques bons livres sur Perl ? ==

* "Introduction Perl" de Randal L. Schwartz, O'Reilly
International ISBN 2-84177-005-2
* "Programmation en Perl" (3ème dition) de Larry Wall, Tom
Christiansen et Jon Orwant, O'Reilly International ISBN
2-84177-140-7
* "Perl en action" de Tom Christiansen & S.Blondeel O'Reilly
International ISBN 2-84177-077-X

Voir <http://www.editions-oreilly.fr/perl.html>


==== Comment trouver de l'aide et debugger un script Perl ? ====


== Comment debugger un script Perl ? ==

Utilisez ce pragma pour commencer vos scripts:

#!/usr/bin/perl -w
use diagnostics;
use strict;

* -w: Affiche divers avertissements optionnels (quivalent de use
warnings; sous perl-5.8)
* use diagnostics: Rend les messages de -w plus explicites.
* use strict: Gnère certains messages d'erreur sur des variables
non sres, rfèrences ou fonctions. Voir la porte des variables.

Il existe le module Devel::ptkdb qui permet d'avoir un debugger
graphique en Perl/TK.


== Comment trouver de l'aide en Perl ? ==

* Lire les FAQ disponibles distribues avec Perl. Voir les liens
de la première question pour la version franaise.
* Faire une recherche dans les news sur les articles posts sur le
sujet. En effet, les articles de news sont archivs et indexs
comme les pages HTML. Il est donc facile de savoir si quelqu'un a
dj eu un problème similaire. Un des meilleurs moteurs pour les
news est Google.
* Si aucun des 2 premiers points n'a rpondu vos question, les
news <news://fr.comp.lang.perl> et
<news://fr.comp.infosystemes.www.auteurs> vous attendent.
* Vous pouvez aussi utiliser IRC. Utilisez un client IRC (ex:
Xchat ou Trillian). Allez :

IRCNET le canal #perlfr sur le serveur
<irc://irc.fr.ircnet.net/>
FREENODE le canal #perlfr sur le serveur
<irc://irc.eu.freenode.net/>


== Pourquoi/Quand ne pas envoyer de questions concernant les CGI sur
fclp ? ==

Le forum fr.comp.lang.perl est ddi Perl. Donc, inutile de
poster dans ce forum si votre problème concerne la configuration
du serveur (<news://fr.comp.infosystemes.www.serveurs/>), PHP
(<news://fr.comp.infosystemes.www.auteurs.php/>), ou le
fonctionnement gnral des CGI
(<news://fr.comp.infosystemes.www.auteurs>).

Ce n'est pas non plus un forum o demander de A jusqu' Z ce que
vous voulez faire. Si vous vous sentez juste au niveau technique,
l'embauche de salari(s) ou de programmeur(s) indpendant(s) peut
tre prvoir ... Par contre, si votre problème porte sur une
instruction Perl dans une application quelle qu'elle soit, vous
tes sur le bon forum.


==== CPAN ====


== Existe-t-il une version de Perl pour ... ? ==

Voir <ftp://ftp.perl.com/CPAN/ports> ou
<ftp://ftp.lip6.fr/pub/perl/CPAN/ports>


== Que sont les modules de Perl ? ==

Il s'agit de bibliothèques supplmentaires dveloppes un peu
partout dans le monde et rpondant des besoins très varis. Les
modules sont tous regroups sur les sites du CPAN. Certains
finissent par tre incorpors dans les distributions de Perl. (Ex
: CGI).

L'extension d'un module est .pm, on l'utilise avec la directive
use.

Les modules sont classs soit par thèmes, soit par auteur, soit
par nom de module. Pensez-bien avant de dvelopper quelque chose
visiter les catgories similaires votre projet.

la base de donnes des miroirs du CPAN est disponible sur le site
<http://mirror.cpan.org/>.

Voici deux sites contenant un miroir du CPAN :

* Hbergement amricain : <ftp://ftp.perl.com/CPAN/modules/>
* Hbergement franais :
<ftp://ftp.lip6.fr/pub/perl/CPAN/modules/>


== Existe-t-il un module/script qui fait ... ? ==

Il existe un moteur de recherche sur la liste des modules:
<http://search.cpan.org/>.


== Comment installer un module Perl ? ==

* Sous Unix (mthode manuelle)
% tar zxvf monmodule.tar.gz
% cd monmodule
% perl Makefile.PL
% make
passer en root
# make install

* Sous Unix (via le module CPAN)
sous le compte root
# perl -MCPAN -e shell
# > install mon::module

* Sous Windows : (ActiveState) Utilisez ppm:
C:\>ppm
PPM interactive shell (1.1.1)
- type 'help' for available commands.

PPM> search DBI
Packages available from http://www.activestate.com/Packages
DBI [1.13.1] Database independent interface for Perl
FindBin [1.04 ] Locate directory of original perl script

PPM> install DBI
Install package 'DBI?' (y/N): y
Retrieving package 'DBI'...
Writing D:\perlNT\site\lib\auto\DBI\.packlist
PPM>

* Sous Windows (Indigo Perl): Il faut utiliser l'interface Web
GPM http://www.indigostar.com/indigoperl.htm


== Existe-t-il une version de Perl pour Windows ? ==

Il y a :

ActiveState
<http://www.ActiveState.com/ActivePerl/download.htm>

IndigoPerl ( Perl+Apache+PHP )
<http://www.indigostar.com/indigoperl.htm>


== Existe-t-il un environnement de dveloppement pour Perl ? ==

Les scripts Perl sont des fichiers textes, il n'existe pas
d'environnement de dveloppement proprement parler. Un vi ou un
wordpad peut suffire.

Maintenant pour le confort, il y a :

GNU/Emacs
<http://www.gnu.org/software/emacs/emacs.html>

XEmacs
<http://www.xemacs.org/>

Komodo
<http://www.activestate.com/Products/Komodo/>

OpenPerl IDE
<http://open-perl-ide.sourceforge.net/>

SCiTE
<http://www.scintilla.org/SciTE.html>

: VIM <http://www.vim.org/>

Nedit
<http://www.nedit.org/>

Et d'autres ...


==== perldoc perlfunc ====


== Comment rcuprer des paramètres en ligne de commande ? ==

Les paramètres passs en ligne de commande sont stocks dans le
tableau @ARGV.

Voir perldoc perlvar . Voir aussi Getopt::Long et Getopt::Std pour
des options de la forme -h ou --help .


== Comment utiliser un ensemble de fonctions Perl comme une
bibliothèque ? ==

Il faut mettre l'ensemble des fonctions dans un fichier texte, et
rajouter 1; en bas de fichier. Pour utiliser la bibliothèque,
faire "require monfichier.pl";

Exemple :

# fichier meslib.pl
sub affiche_toto {print "toto\n";}
sub affiche_tata {print "tata\n";}
1;
# fin de meslib.pl

#!/usr/bin/perl -Tw
# Executable
use strict;
require "/mon/home/meslib.pl";
affiche_toto();
affiche_tata();

Voir perldoc -f require


== Comment trier un tableau ? ==

Perlfaq4, Comment trier un tableau par ...


== Comment rcuprer la date du jour ? ==

Cf perldoc -f localtime

( $seconde, $minute, $heure, $jour, $mois, $annee,
$jour_de_la_semaine, $jour_de_l _annee, $drapeau_heure_ete )
= localtime( time() );

Il faut ajouter 1900 a l'anne pour une date correcte
($annee+=1900) et 1 au mois pour obtenir une date correcte
($mois++).


== Comment rcuprer des informations sur un fichier ? ==

Cf perldoc -f stat. Par exemple pour rcuprer mtime (date de
dernière modification du fichier)

my( $fchier )= "/tmp/toto";
# Si le fichier existe on rcupère des infos dessus
my @etat = stat( $fchier )
or die "stat( $fichier ) failed: $!";
# On convertit avec localtime la valeur de mtime.
my $date = localtime( $etat[9] );
print $date;


== Comment copier un fichier ? ==

use File::Copy;

copy( $src, $dest )
or die "impossible de copier $src vers $dest : $!";


== Comment connatre le contenu d'un rpertoire ? ==

Cf perldoc -f opendir,readdir,closedir. Par exemple, lire tous les
fichiers de $rep sauf ceux dont le nom commence par "." :

opendir(DIR, $rep) or die "Erreur en ouvrant $rep : $!";
my @liste = readdir(DIR) or die "Erreur en lisant $rep : $!";
my @liste = grep { !/^\./ } @liste;
closedir(DIR) or die "Erreur en fermant $rep : $!";


==== Rseau ====


== Comment faire un client FTP ? ==

En utilisant le module Net::FTP

use Net::FTP;

my $ftp = Net::FTP->new("some.host.name");
$ftp->login("anonymous","mon@adresse.mail");
$ftp->cwd("/pub");
$ftp->get("/ce/repertoire/ce.fichier");
$ftp->quit;


== Comment faire un client TELNET ? ==

En utilisant le module Net::Telnet

use strict;
use Net::Telnet;
use CGI qw/:standard :html3 :netscape escape unescape/;
use CGI::Carp qw/fatalsToBrowser/;

my $username="alian";
my $passwd="password";
my $HOST="indy.alianet";
print header;
my $t = new Net::Telnet (Timeout=>undef) or die "Can't connect:
$!";
$t->open($HOST);
$t->login($username, $passwd);
my @lines = $t->cmd("/ma/commande/a/executer");
print join(' ',@lines);


== Comment faire un client HTTP ? ==

En utilisant le module LWP

use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("AgentName/0.1 " . $ua->agent);

# Creation d'une requete
my $req = new HTTP::Request ( 'POST',
'http://www.perl.com/cgi-bin/BugGlimpse' );
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');

# On passe la requte l'agent et on attend le rsultat
my $res = $ua->request($req);

# Si le rsultat est un succès (code HTTP 200) on affiche son
contenu
if ($res->is_success) {print $res->content;}

# Sinon on prvient que URL est defectueuse
else {print "Cette URL ne rpond pas\n";}


==== Annexes ====


== Les toolkits graphiques ==

Il existe diffrents toolkits graphiques en perl. il y a :

Perl/TK
Perl/TK est le toolkit historique en Perl. Il est disponible
sur quasiment toutes les plate-formes.

Perl/GTK et Glade
Perl/GTK est bas sur GTK le noyau de The Gimp et de Gnome.
<http://www.gtkperl.org/>

Glade est un RAD pour faire des interfaces GTK en XML.

Perl/QT
QT est le toolkit de KDE dit par TrollTech.

WxPerl
WxWindows est un toolkit pour plusieurs plate-formes.
<http://wxperl.sourceforge.net/>

Prima
Prima est un toolkit pour plusieurs plate-formes avec un RAD
pour faire les interfaces. <http://www.prima.eu.org/>


== Comment lancer une commande système ? ==

* `ls`;
* system('ls');
* exec('ls');
* open( PROG, "ls|" );
* Les modules IPC::Open2 et IPC::Open3 permettent de faire
communiquer deux programmes via STDIN, STDOUT et STDERR (pour
IPC::Open3).

En sachant que toutes n'agissent pas de la mme manière. Voir
perlfaq8


== Comment savoir laquelle de mes deux commandes est la plus optimise
? ==

En sachant que ce module produit beaucoup de bruits et ne permet
de dcouvrir que des choses videntes...

#!/usr/local/bin/perl -w

use Benchmark;

my $code1 = sub { for ( $i=0 ; $i<100 ; $i++ ) { } };
my $code2 = sub { $i=0; while ( $i<100 ) { ++$i } };
my $code3 = sub { for ( 0..99 ) { } };

my $t1 = timeit( 1000000, $code1 );
my $t2 = timeit( 1000000, $code2 );
my $t3 = timeit( 1000000, $code3 );

print "Code 1 -> ", timestr( $t1 ), "\n";
print "Code 2 -> ", timestr( $t2 ), "\n";
print "Code 3 -> ", timestr( $t3 ), "\n";


== Comment distribuer des programmes Perl sans Perl ? ==

Utilisez pp (Perl Packager) qui est distribu avec le module PAR
(Perl ARchive). On peut l'installer

* sous Unix avec le module CPAN (sous le compte root)
# perl -MCPAN -e shell
# cpan> install PAR

* sous Windows, avec ppm :
> ppm install PAR

Ensuite la commande

pp monscript.pl

produit un (gros) fichier ex\x{00E9}cutable a.out (Unix) ou a.exe
(Windows). Voir les nombreuses options dans la doc de pp.

Il y a aussi deux programmes (non gratuits) :

* Perl2Exe chez IndigoSTAR
<http://www.indigostar.com/perl2exe.htm>
* PerlApp dans le Perl Dev Kit d'ActiveState
<http://www.activestate.com/Products/Perl_Dev_Kit/>


== Quel est la porte des variables en Perl ? ==

Par dfaut, Perl voit toutes les variables qui n'ont pas t
dclares comme locales comme des variables globales. A partir du
moment o une variable a t initialise et non dclare, sa
valeur sera conserve quel que soit le bloc. Dclarer une variable
comme locale au bloc/fonction se fait l'aide des oprateurs my
et local, chacun ayant ses spcificits.

Une variable, telle que $scal, @arr, ou %hash est une entre dans
la table de symboles du module courant.

Dans un bloc, dclarer : local $scal; a pour effet d'empiler une
nouvelle valeur pour la variable $scal, qui reste globale. Cette
valeur sera dpile la sortie du bloc.

Par contraste avec : my $scal; qui dclare une variable scope
statiquement, qui ne correspond pas une entre dans la table des
symboles, et est donc juste visible dans le bloc courant, ou le
fichier courant si dclare l'exterieur d'un bloc. A la faon
d'une variable automatique en C. Perl gère les fermetures (un peu
comme Lisp), ce qui signifie qu'une variable my $scal peut tre
accede mme lorsque le bloc dans lequel elle a t dclare a t
ferm.

Par exemple:

{
my $x = 3;
sub inc_x { $x += 1; }
sub print_x {print "\$x = $x\n";}
}
print_x();
inc_x();
print_x();

Renvoie: 3 4

Il est encore plus conseill de ne pas garder ce comportement par
dfaut en utilisant le module strict. Lorsque vous mettez "use
strict;" au dbut de votre script, vous vous obligez dclarer
toutes vos variables. Une variable globale se dfinit alors
l'aide du pragma : use vars qw( $mes $noms %de @variables ); A
noter que quand le nombre de variables globales est grand, ce
n'est pas très pratique ni très lisible. A partir de la version
5.6.0 de perl (et mme des toutes dernières versions 5.5_...), le
mot cl 'our' peut tre utilis pour dclarer une variable
globale.

Il existe un document très bien fait s'appelant "Coping with
scoping" disponible l'adresse
<http://www.enstimac.fr/Perl/ModulesFr/Les_espaces_de_nom.html>.


==== Divers ====


== Contributeurs ==

les contributeurs de cette FAQ sont :

Alain Barbet - auteur initial
Samuel Mounie - auteur
Benoit Izac - auteur
Jean-Louis Morel - auteur
Ronan Le Hy - relecteur
Alex Marandon - relecteur
Emmanuel Florac - relecteur
Paul Gaborit - relecteur
Olivier (Rue des Prairies) - relecteur

2 réponses

Avatar
Benoit Izac
Bonjour,

le 16/08/2005 à 14:05, Samuel Mouniee a écrit
dans le message <usenet+ :

perldoc <nom rubrique>. La documentation est dcoupe par grands
^

thèmes, comme la scurit (perldoc perlsec) , les fonctions du
^ ^

langage Perl (perldoc perlfunc), etc ... Un bon dbut est perldoc
^

* perlfaq9 - Rseau
^


Il semblerait qu'une bonne partie des lettres accentuées soit manquante.

--
Benoit Izac

Avatar
Patrick Texier
Le Fri, 19 Aug 2005 07:10:45 +0200, Benoit Izac
a écrit :

Il semblerait qu'une bonne partie des lettres accentuées soit manquante.


À priori toutes.

Je pense aussi qu'il faudrait que cette FAQ soit publiée sur
fr.usenet.reponses. La modération est actuellement active.