require PERL

require PERL - Perl - Programmation

Marsh Posté le 07-06-2006 à 17:23:40    

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 !

Reply

Marsh Posté le 07-06-2006 à 17:23:40   

Reply

Marsh Posté le 07-06-2006 à 20:28:23    

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
Reply

Marsh Posté le 07-06-2006 à 21:02:43    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed