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 :

Problème de Require


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut Problème de Require
    Bonjour,

    J'ai un problème lors du require d'un de mes fichiers.

    J'ai un fichier Variables.pl qui contient la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $user="TOTO";
     
    ....
    sub User(){
        return $user;
    }
     
    ....
    Et j'ai un fichier Code.pl qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    require "Variables.pl";
     
    print $user_recup=Variables::User();
    Et là, j'ai une superbe erreur :
    Undefined subroutine $Variables::User called at....

    Je ne comprend pas pourquoi.
    J'ai modifié l'ordre de mon code, rien n'y fait.
    D'où celà peut venir?

    Merci,
    Lucie

  2. #2
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Bonjour,

    Le problème c'est que tu n'as pas assigné un espace de nom (en Perl, on parle plutôt de paquetage) à ton sous-programme. Il faut savoir qu'en Perl, les fichiers sont indépendants des paquetages, bien qu'en général pour un fichier on trouve un paquetage.
    L'appel Variables::User() cherche la fonction User du paquetage Variables, or ce dernier n'existe pas. Pour le créer, voilà comment faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package Variabes #définit l'espace de nom
    $user="TOTO";
     
    ....
    sub User(){
        return $user;
    }
     
    ....
    1; #un module doit renvoyer une valeur vraie !
    Enregistre ce fichier avec Variables.pm comme non (.pm, pas .pl).
    Pour plus d'infos sur les espaces de noms et sur les modules, je te conseille de lire la documentation officielle de Perl, chapitre 10

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut
    Bonjour,

    Merci, mon erreur était effectivement là.

    J'aurai une autre question. Y-a-t-il un ordre spécial en Perl avec les appels de fonctions et les fonctions d'un fichier à l'autre?

    Merci,
    Lucie

  4. #4
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Citation Envoyé par Luciefer
    J'aurai une autre question. Y-a-t-il un ordre spécial en Perl avec les appels de fonctions et les fonctions d'un fichier à l'autre?
    Tu peux expliciter là ? Parce que je ne comprend pas bien la question...

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut
    Je sais par exemple qu'il faut toujours faire l'appel de fonction avant de définir la fonction.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    fonction();
     
    sub fonction(){
       ....
    }
    Y-a-t-il d'autres règles de ce genre?

  6. #6
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Citation Envoyé par Luciefer
    Je sais par exemple qu'il faut toujours faire l'appel de fonction avant de définir la fonction.
    Qui est ce qui t'as dit ça ? Non, parce que n'est pas du tout le cas, l'ordre n'importe absolument pas pour ça. Par contre, si tu utilises des fonctions d'un module dans ton programme, inclue le module avant.

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

Discussions similaires

  1. Problème de require après mise à jour de Ruby
    Par abir84 dans le forum Ruby
    Réponses: 3
    Dernier message: 04/01/2008, 12h16
  2. Problème avec require()
    Par LFC dans le forum Langage
    Réponses: 1
    Dernier message: 08/12/2007, 18h37
  3. [DEV]Problème WebPart-Required Field Validator
    Par voschielle dans le forum SharePoint
    Réponses: 4
    Dernier message: 05/10/2007, 19h16
  4. Validator:Problème de required pour un select
    Par lili2704 dans le forum Struts 1
    Réponses: 4
    Dernier message: 02/07/2007, 13h52
  5. [Système] problème avec require
    Par pas30 dans le forum Langage
    Réponses: 3
    Dernier message: 14/06/2007, 07h39

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