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 :

fonction require()


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Par défaut fonction require()
    bonjour,
    J'ai un petit soucis avec la fonction require...

    dans un script (query.pl), j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/perl
    use strict;
     
    require ("connection.pl");
    dans mon fichier appelé, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/perl
    use strict;
     
    #connection a la base
    my $connection = DBI->connect("DBI:Pg:database=my_db","","") or die "probleme de connection".DBI->errstr();
    mais le fichier query.pl me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Global symbol "$connection" requires explicit package name at /var/www/cgi-bin/donnees_tables/requete.pl line 46.
    indiquant la ligne ou j'utilise $connection... pourtant j'ai le my dans mon fichier en require... alors je comprend pas...

  2. #2
    Expert confirmé
    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
    Par défaut
    require() n'est pas un include, il ne recopie pas le code à son emplacement, il provoque simplement l'exécution du script indiqué. Et cette exécution ne se fait pas dans la même unité lexicale (dans la même portée), c'est pourquoi ton $connexion qui est une variable locale (puisque déclarée par my()) n'est pas disponible dans ton programme principal.
    Pour que $connexion soit disponible, il faudrait qu'elle soit une variable globale, donc déclarée par our().
    Néanmoins ton procédé n'est pas très propre : normalement, un module doit être inclus dans un package (espace de nom) différent.
    Pour plus de détails sur les packages et les modules, consulte la FAQ.

    --
    Jedaï

  3. #3
    Membre éclairé Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Par défaut
    Je dai a raison fait un package,

    voici la base d'un package

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package Test;
    use Exporter;
    @ISA=('Exporter');
     
    # Variables , tableau ou fonction visible de l'extérieur
    @EXPORT_OK=('FONTION VISIBLE DE L'EXTERIEUR');
     
     
    TON CODE FONCTION ETC...
     
    1;

    voici un exemple simple


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    package Test;
    use Exporter;
    @ISA=('Exporter');
     
    # Variables, tableau ou fonction visible de l'extérieur
    @EXPORT_OK=('coucou','message','$i','%l','@m');
     
     
    #--------------------------------
    # Dit coucou
     
    sub coucou {
      return "coucou";
    }
     
    #-------------------------------
    # répond au mésage message
     
    sub message {
      my $var = shift;
      my $string = "Vous avez dit : $var";
      return $string;
    }
     
    #-------------------------------
    # variables, tableau, hash
     
    $i = "maison";
     
    %l = (
      bebe => "biberon",
      gna  => "Rah il chiale a trois heure du mat :@"
    );
     
     
    @m = ("yo!");
     
     
     
    1;





    Pour invoquer ce package rien de plus simple


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    bidon.pl
     
    #!/usr/bin/perl -w
    use strict;
    use Test ('$i','%l','@m');
     
     
    # execution de coucou();
     
    my $h = coucou();
    print $h;
     
    # execution de message
    my $s = "je suis scaleo et toi ?";
       $s = message($s);
    print $s;
     
     
    # variables, tableau, hash
     
     
    print "$i\n";
     
    foreach my $key (sort keys %l) {
      print "$key : valeur -> $l{$key}\n"; 
    }
     
     
    print @m;
    comme tu peut voir c'est très simple et sa permet de bien séparer les différentes partie d'un programme bref c'est tout benef

Discussions similaires

  1. Boucle While et fonction Require combinées
    Par Oliix dans le forum Langage
    Réponses: 14
    Dernier message: 30/05/2013, 09h43
  2. Réponses: 2
    Dernier message: 29/10/2010, 12h11
  3. [Configuration] conflit avec la fonction require et valeur de include_path
    Par gilardino dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 06/08/2007, 15h51
  4. Fonctions include et require avec php 5.2.1
    Par Nuts07 dans le forum Langage
    Réponses: 10
    Dernier message: 10/03/2007, 23h30
  5. Fonction include (ou require ?)
    Par Link14 dans le forum Langage
    Réponses: 6
    Dernier message: 04/06/2006, 15h40

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