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 :

portée des "use" ?


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut portée des "use" ?
    Bonjour,

    Je me pose une question sur la porté des use !
    par exemple si j'ai un script
    toto.pl ==> contenant un "use File::Copy"
    et que dans ce script j'utilise une class "class_toto.pl" qui a aussi besoin des fonctions de la lib "File::Copy"

    Suis-je obligé de redéclarer "use File::Copy" dans ma class class_toto.pl ?

    Merci par avance de vos lumières

    Medea

  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
    Normalement les "classes" ne sont pas des fichiers .pl, mais des modules .pm. Si tu utilises File::Copy dans ton module, alors évidemment, il doit y avoir un use File::Copy dans ce module, puisque a priori, tu ne sais pas dans quel contexte ce module sera utilisé. Il n'y a donc aucune raison de se préoccuper de ce genre de chose, sauf si tu as fais un code très sale (par exemple utiliser des .pl au lieu des .pm) : est-ce le cas ?

    --
    Jedaï

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Tout dépend de l'utilisation que tu comptes faire de ton pm par la suite.

    S'il ne sert que pour ton script Perl, tu peux indiquer ton "use File::Copy" dans le script Perl ou ton pm, peu importe.

    Mais si ton pm doit pouvoir être utilisé avec d'autres scripts Perl, c'est un peu dommage d'obliger chaque script à avoir le use en question.

    Regarde les .pm de ta distribution Perl et tu verras que s'ils ont besoin d'un package ou d'une pragma particulière, y a automatiquement un use dans le pm.


  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Il n'y a donc aucune raison de se préoccuper de ce genre de chose, sauf si tu as fais un code très sale (par exemple utiliser des .pl au lieu des .pm) : est-ce le cas ?
    Non mes classes sont bien en .pm ! ma question était plus de l'ordre de l'optimisation de l'ensemble de mes .pm et .pl, pour éviter de charger plusieurs fois le même module ! si par exemple dans un .pl j'ai 3 classes .pm utilisant toutes des fonctions de "File::Copy". Je me demandais si je pouvais charger 1 seul fois "File::Copy" dans le .pl ...

    Mais au vu de ton explication Arioch, le mieux semble de garder independant chaque classe, en mettant un use de tous les modules dont la classe à besoin !

    En tout cas merci de vos réponses !

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Citation Envoyé par medea23
    Mais au vu de ton explication Arioch, le mieux semble de garder independant chaque classe, en mettant un use de tous les modules dont la classe à besoin !
    Je procède toujours de cette manière et ainsi, pas besoin de me préoccuper dans le script principal d'autres choses que d'indiquer des use vers les packages

  6. #6
    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
    De plus pour te tranquilliser, même si tu as plusieurs fois le 'use Module;' dans ton code, le fichier Module.pm ne sera chargé et interprété qu'une fois. Par contre la fonction import() sera exécutée dans chaque module où l'on aura fait un 'use'. (NB : Cela revient au même que si tu avais fais un require dans le premier script à faire un 'use Module;' puis que tu n'avais fait qu'un import() dans tous les modules qui font un 'use Module;')

    --
    Jedaï

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci bien Jedai pour ta petite mise au point !!!!!!
    Forum trés sympat Merci à vous !
    Maintenant je viendais plus souvent

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