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 :

[perl] variable globale


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut [perl] variable globale
    Bonsoir à tous,

    Ma question est peut-êtr ebizarre mais y a quelque chose que je ne comprends pas.

    Dans une fonction appartenant à un package, je définis une variable (un tableau de hachage), que je retourne à mon programme.

    Je voudrais que cette variable soit aussi disponible pour tous les packages que j'appelle dan smon programme principal?

    Comment faire ???

    Faut il utiliser @ISA, ques-ce que @ISA.

    utiliser l'opérateur "vars", quest-ce que c'est ?

    Utiliser l'opérateur "our" me dérange car plusieurs personnes me l'on déconseillé sur le forum.

    Merci pour vos réponses.


    Et joyeuses fêtes de fin d'années au fait !!!!

  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 Re: [perl] variable globale
    Citation Envoyé par LE NEINDRE
    Utiliser l'opérateur "our" me dérange car plusieurs personnes me l'on déconseillé sur le forum.
    Nggg ? Tu es sûr ?

    Par ailleurs ce que tu demandes est très bizarre et semble relever d'une erreur de conception : avoir une variable définie dans un package et disponible dans plusieurs est assez étrange... Normalement un package se suffit à lui-même et à la tâche qu'il est censé accomplir, il n'utilise de variables extérieures que par l'intermédiaire des paramètres de fonctions.

    Si tu étais plus explicite sur ce que tu tentes de faire, nous pourrions peut-être te pointer une structure plus correcte.

    --
    Jedaï

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Bonjour Jedaï !

    Je tente réaliser une petite application à l'aide de WxPerl.
    Et, tu as raison, j'ai probablement des problèmes de structure car j'avance un peu dan sle flou

    J'ai grosso-modo la stucture suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
                                          ------Menubar
                                          |-----Toolbar          |--------Frame01
                                          |                      |
    app01---->MainFrame----->--------->widowsplitter--------
                                                                 |
                                                                 |---------Frame02
                                                                                 |
                                                                            package EDI
    Dans le package EDI, je récupère de ma base données des infos en fonction de valeur entrées dans un textbox de la Frame01 et j'affiche les résultats dans un Grid défini dan sla Frame02

    Le lancement de la recherche se fait en appuyant sur un bouton de la Frame01:
    Dans Frame01, déclaration du bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->{'Bouton1'}=Wx::Button->new($this,$MainFrame::N_BOUTON_SEARCH,"Search",wxDefaultPosition,wxDefaultSize);
    Dans MainFrame, déclaration de la valeur du bouton et création d'un événement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $N_BOUTON_SEARCH=710;
    EVT_BUTTON($this,$LPane::N_BOUTON_SEARCH,\&PerlSearch);
    package EDI :
    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
     
    .....
    ..
    sub Search()
    {
          my $bgm=$_[0];
          my @SQLResult;my $i;
          my @Champs=split(/ /,&Conf::GetVar('sql_fields'));
          my $dbh=&Connexion();
          my $req=$dbh->prepare("SELECT * FROM commande_in cmd, message_in msg, partenaire part WHERE cmd.BGM like \'%$bgm%\' AND cmd.ID_MESSAGE=msg.ID_MESSAGE AND msg.UNB=part.UNB");
          $req->execute();
          while(my $ref=$req->fetchrow_hashref())
          {
               @{$SQLResult[$i]}{@Champs}=@$ref{@Champs};
               $i++;
     
          }
          $req->finish();
          &Deconnexion($dbh);
          return \@SQLResult;
    }
    ..
    .....
    Enfin, je récupère dans Mainframe, la référence au tableau retourné par le fonction Search du package EDI (et affiche les valeurs dans le Grid de la Frame02:
    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
     
    sub PerlSearch()
    {
          my($this,$evt)=@_;
          $this->SetCursor( Wx::Cursor->new( wxCURSOR_WAIT  ) );
          $this->{'StatusBar'}->SetStatusText("Please wait while searching ...",1);
          my $BDResult=&EDI::Search($this->{LPANE}->{'Text1'}->GetValue());
          if($#{$BDResult} > -1)
          {
                $this->{'StatusBar'}->SetStatusText("Done -- ".($#{$BDResult}+1)." results",1); 
                &DisplayResult($this->{RPANE},$BDResult);
          }
          else
          {
               $this->{'StatusBar'}->SetStatusText("Done -- No result",1);      
          } 
          $this->SetCursor( Wx::Cursor->new( wxCURSOR_ARROW ) );
    }

    Voilà, je voudrais avoir accès à ma variable $BDResult, partout, tout le temps etc ....

    Est-ce possible ???

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    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 603
    Par défaut Re: [perl] variable globale
    Citation Envoyé par LE NEINDRE
    Dans une fonction appartenant à un package, je définis une variable (un tableau de hachage), que je retourne à mon programme.

    Je voudrais que cette variable soit aussi disponible pour tous les packages que j'appelle dan smon programme principal?

    Comment faire ???
    Le plus simple selon moi (déjà testé et approuvé ) :

    - déclarer ton tableau de hachage dans le programme principal (script Perl)
    - le fournir comme argument de fonction à toutes les fonctions utilisées dans tes packages

  5. #5
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Salut le neindre!

    J'apporte aucune aide a ton problème, c'est seulement pour te spécifier d'utiliser les paramètres de execute() pour éviter le sql injection

    ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $req=$dbh->prepare("SELECT * FROM commande_in cmd, message_in msg, partenaire part WHERE cmd.BGM like \'%$bgm%\' AND cmd.ID_MESSAGE=msg.ID_MESSAGE AND msg.UNB=part.UNB"); 
          $req->execute();
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $req=$dbh->prepare("SELECT * FROM commande_in cmd, message_in msg, partenaire part WHERE cmd.BGM like ? AND cmd.ID_MESSAGE=msg.ID_MESSAGE AND msg.UNB=part.UNB"); 
    $req->execute("%$bgm%");
    my 0.02¢
    A+

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    ok, merci pour le conseil,
    je prends note et execute !!!

    Joyeuses fêtes à tous !!!!!!!!!

  7. #7
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Et n'oublies pas le tag Résolu avant d'attaquer les fêtes !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Oui, bien sûr.
    Mais je crois que mon problème n'est pas résolu.
    Je voudrais savoir ce que font la déclaration vars et le tableau @ISA .....

Discussions similaires

  1. Variables globales Perl
    Par drvercetti dans le forum Langage
    Réponses: 5
    Dernier message: 30/06/2011, 10h45
  2. editer variable globale (perl->shell)
    Par Matmal11 dans le forum Langage
    Réponses: 2
    Dernier message: 10/05/2007, 11h15
  3. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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