Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1388 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  require PERL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

require PERL

n°1383041
radioh
Posté le 07-06-2006 à 17:23:40  profilanswer
 

Salut tout le monde,  
 
je fais un programme en perl avec le module CGI et j'interagis avec une base de données...
 
J'aimerais ne pas réécrire chaque fois le même code au debut de chacun de mes fichiers perl. Par exemple,tous mes fichiers commencent par :  
 
#!/usr/bin/perl
 
use DBI;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use strict;
use Date::Calc qw(:all);
 
my $dbname = 'Projet';
my $user = 'user';
my $pass = 'pass';
my $dbh = DBI->connect("dbi:Pg:dbname=$dbname", $user, $pass) or die DBI::errstr;
 
y'a t-il un moyen d'ecrire ces lignes dans un autre fichier et de tout importer dans le fichier principal ?
 
g essayé require "fichier.pl" mais ca ne marche pas !

mood
Publicité
Posté le 07-06-2006 à 17:23:40  profilanswer
 

n°1383159
lami20j
Posté le 07-06-2006 à 20:28:23  profilanswer
 

Salut,
 
tu crées un module et dans ton script tu peux utiliser
 

Code :
  1. use lib "/chemin/vers/ton/module";
  2. use Module::DBConnect; # dans /chemin/vers/ton/module/Module on trouve le module DBConnect.pm


 
Voilà mon exemple. Pour ne par répeter les même lignes j'ai créé 3 fonctions et je les appelles.
 

Code :
  1. #! /usr/bin/perl -w
  2. package Module::DBConnect;
  3. require Exporter;
  4. our @ISA = qw(Exporter);
  5. our @EXPORT = qw(connexion selection insertion);
  6. use strict;
  7. use DBI;
  8. # utilisation : connexion("nom_base" )
  9. sub connexion {
  10.         my $db = $_[0];
  11.         my $db_connexion = DBI->connect("DBI:mysql:database=$db;host=localhost;mysql_socket=/tmp/mysql.sock",
  12.                                      "root","xxxxxxxx",{ RaiseError => 1 } );
  13.         return $db_connexion;
  14. }
  15. # utilisation : selection("nom_base","nom_table",tableau_champs)
  16. sub selection {
  17.         my ($db,$tbl,@champ) = @_;
  18.         my $champ;
  19.         if(@champ){
  20.           if(@champ==1){
  21.            $champ=$champ[0];
  22.           }else{
  23.            $champ = join ",", @champ;
  24.           }
  25.         }else{
  26.          $champ='*';
  27.         }
  28.         my $db_ = connexion($db);
  29.         my $query = $db_->prepare("SELECT $champ FROM $tbl" );
  30.         return $query;
  31. }
  32. # utilisation : insertion("nom_base","nom_table",reference tableau_champs, reference tableau_valeurs)
  33. # utilisation : insertion("nom_base","nom_table",\tableau_champs,\tableau_valeurs)
  34. sub insertion {
  35.         my $db  = connexion(shift @_);
  36.         my $tbl = shift @_;
  37.         my $chp = shift @_;
  38.         my $val = shift @_;
  39.         my ($champ,$valeur);
  40.         if (ref($val)){
  41.          foreach(@$val) {
  42.                 $_=$db->quote($_);
  43.          }
  44.         }else{ $val=$db->quote($val) }
  45.         if(ref($chp)){
  46.                 $champ  = join ",", @$chp;
  47.         }else{ $champ = $chp }
  48.         if(ref($val)){
  49.                 $valeur = join ",", @$val;
  50.         }else{ $valeur = $val }
  51.         $db->do("INSERT INTO $tbl ($champ) VALUES ($valeur)" );
  52. }


 
et le script ou j'utilise le module

Code :
  1. #! /usr/bin/perl -wT
  2. use CGI;
  3. use lib "/home/cgibin/cgi-bin";
  4. use Module::DBConnect;
  5. my $cgi=new CGI;
  6. my $mysql_sock='/tmp/mysql.sock';
  7. my $cmd      = $cgi->param('cmd')       ;
  8. my $question = $cgi->param('question')  ;
  9. my $reponse  = $cgi->param('reponse')   ;
  10. my $exemple  = $cgi->param('exemple')   ;
  11. my @valeurs = ($question,$reponse,$exemple);
  12. my @champs = qw( q r ex );
  13. #alter table message convert to character set utf8;
  14. #set character set utf8;
  15. #alter table nom_table auto_increment=0
  16. my $db_;
  17.         if($reponse eq "" ){
  18.                 insertion('chap_cmd_question',$cmd,'question',$question);
  19.         }else{
  20.                 insertion('commandes_linux',$cmd,\@champs,\@valeurs);
  21.         }

C'est juste un exemple. Lit plutôt la doc pour les modules.
 
lami20j


Message édité par lami20j le 07-06-2006 à 20:31:43
n°1383186
pospos
Posté le 07-06-2006 à 21:02:43  profilanswer
 

si tu veux importer des fonctions (comme pour CGI) ou utiliser un pragma (comme strict) alors il te faut normalement explicitement les user dans ton module.
Mais il existe tout de meme une solution, Toolset:
http://search.cpan.org/~dagolden/ToolSet


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  require PERL

 

Sujets relatifs
[PERL] Parse d'un fichier de configuration[perl] supprimer les emails bounces (retour/erreur) d'une base mysql
[PERL] [CGI] Recherche a partir de données d'un formulairerequire avec chemin relatif (pb de ./..)
Erreur d'exécution de perl[Perl] telnet connexion!! (resolu)
aidez moi avec perl :mettre les données d'un fichier dans un tableauParcours d'arborescence : Perl ou Shell
[Perl] Débutant : Rechercher mot-clé et extraire paragrapheécoles d'info et perl
Plus de sujets relatifs à : require PERL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR