IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

"use strict" et "require"


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut "use strict" et "require"
    Bonjour à tous,
    j'ai une petite question à vous poser. Jusqu'à présent, je codais mes scripts sans utiliser "use strict" qui me collait des erreurs chaque fois que je l'utilisais et ça m'agaçait. Mais je sais que c'est pas bien !
    Maintenant que mes scripts sont écrits et que le plus gros du travail est terminé, j'aimerais faire les choses proprement, c'est-à-dire éviter d'avoir des centaines de lignes comme la suivante dans le fichier error_logs :
    [Thu Jul 20 12:15:48 2006] [error] Name "main::img_logo2" used only once: possible typo at /usr/local/apache/cgi-bin/recup_CatConf.pl line 25 (#1), referer: http://clpi02/cgi-bin/recup_form.pl
    Pour ça, il me semble que ça vient du fait que "use strict" n'est pas utilisé. Mon problème est le suivant. Pour mes scripts, je fais appel à un fichier dans lequel j'ai stocké toutes mes variables qui ne changent pas, de manière à ne pas avoir à les déclarer à chaque fois (vu que j'ai une cinquantaine de pages qui font appel à ce fichier).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/sbin/perl
     
      use diagnostics;
      use CGI qw/:standard :html3/; 
      use DBI; 
    require "./library.pl";
    et après j'appelle ma base de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbh = DBI->connect("DBI:mysql:$bdd:$server",$log,$pass);
    Sachant que toutes mes variables sont définies dans le fichier library.pl ($bdd,$server,$log,$pass), comment faire pour que "use strict" fonctionne dans le script en cours ?
    Parce que si je les définis pas dans mon script directement ca marche plus...
    ][Thu Jul 20 12:15:48 2006] [error] Global Symbol "$bdd" requires explicit package name
    J'espère avoir été claire, c'est pas super évident à expliquer...

    Merci à ceux qui auront des idées.

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par minusette
    [Thu Jul 20 12:15:48 2006] [error] Name "main::img_logo2" used only once: possible typo at /usr/local/apache/cgi-bin/recup_CatConf.pl line 25 (#1), referer: http://clpi02/cgi-bin/recup_form.pl
    Ca ne vient pas du fait que tu n'utilises pas "use strict", ça vient du fait que certaines de tes variables sont inutiles : en effet leur nom n'est présent qu'une fois, autrement dit peut-être leur affectes-tu une valeur et ne les utilises-tu jamais par la suite... Il y a parfois des utilisations légitimes, mais c'est rare, pourrais-tu nous montrer le bout de code incriminé ?



    --
    Jedaï

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Je peux montrer un bout de mon code
    par exemple voici le début du fichier library.pl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/sbin/perl  
     
    #### les images du site  ####
    $img_logo='../images/homepage_logo.gif';
    $img_logo2='../images/logo.gif';
    et voici comment est appelé ce fichier dans les pages du site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/usr/sbin/perl
     
      use diagnostics; 
      use CGI qw/:standard :html3/;
      require "./library.pl";
     
    ### début de page html ###
    print header,
          start_html(-title=>'toto', # début du HTML -titre de la page-
            	   -BGCOLOR=>'#FFFFFF', # couleur du fond
            	   -text=>'#1C5595'), 
           span({-style=>'Color: rgb(31,96,169);'});
    print  br;
    print "<table width='100%' align='center' valign='center'> 
           <TR>
           <TD width='20%' align='left'><IMG SRC=$img_logo2 BORDER='0'></TD>
           <TD width='60%' align='center'><u><h1>Bonjour</u></h1></TD>
           <TD width='20%' align='right'><IMG SRC=$img_logo BORDER='0'></TD>
           </TR>
           </table>";
    En effet, la plupart des variables définit dans mon fichier library.pl sont des images ou des scripts perl. Ce ne sont pas des variables scalaires, donc je ne les utilise qu'une fois, soit pour afficher une image, soit pour renvoyer vers une autre page via un lien hypertexte... des trucs comme ça.
    Bref, ça ne plaît pas à perl et j'aimerais bien faire en sorte que ça lui plaise de manière à ce qu'il ne ronchonne pas trop dans le fichier error_log.

    Si vous avez une idée de comment palier ce problème...

    Merci

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu n'as qu'à faire de library.pl un vrai module et utiliser les facilités d'export de variables founit par Exporter. Un petit truc comme ça pourrait suffir :
    Library.pm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    package Library;
     
    use strict;
    use warnings;
    require Exporter;
    our @ISA = qw(Exporter);
    our @EXPORT = qw($dumb_var);
     
    our $dumb_var = 1;
     
    1;
    __END__
    Et dans tes programmes tu remplaces ton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    require './library.pl'
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    use lib '.';
    use Library;
    (ça serait peut-être mieux de donner un nom comme MyVars à Library)
    --
    Jedaï

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Merci Jedaï !
    J'essaie ça, dès que j'ai un moment (j'ai plusieurs projets sur le feu...)! Et si j'ai un souci, je me permettrais de vous embeter de nouveau !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/05/2012, 09h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo