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 :

probleme de variable


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut probleme de variable
    Bonjour à tous,

    Je débute en perl et j'essai de me faire un code qui permette de lire un fichier et de stocker le text commencant par bot_ dans des variables.
    Mon probleme vient du fait qu'en dehors de ma fonction ma variable ne semble pas existente.

    Dans le fichier supa.conf j'ai mit ceci:

    # test
    bot_nick Henry
    bot_ident testy
    bot_name Test de chaine
    # Fin
    Maintenant voici le code:

    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
     
    # loadconf();
    # Initialisation de la configuration
    sub loadconf {
    	my $path = "supa.conf";
    	my $bot = shift;
     
    	open(FILE,$path) or die("Impossible d'ouvrir $path : $!");
    	while (defined(my $text = <FILE>)) {
    		chomp($text);
    		if ($text =~ /^bot_([^ ]*) (.*)/) {
    			$bot->{$1} = $2;
    			print "$1 = $bot->{$1}\n"; # test 1
    			}
    	}
    	close(FILE);
    }
     
     
    &loadconf();
     
    #test 2
    print "$bot->{nick}\n";
    # Fin du code
    Voila, en esperent que quelqu'un puisse m'aider a corriger ca
    à plus tard et merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Salut Ganondorf,

    Ta variable '$bot' n'existe que dans ta fonction, car déclarée en tant que telle 'my $bot'. Si tu veux qu'elle soit globale, tu sors le 'my $bot' de la fonction (ie: au début du script par exemple) et tu ne fais que l'affectation dans ta fonction (ie: '$bot = shift;').

    De plus, tu appelles ta fonction loadconf sans paramêtre alors que tu essayes de récupérer un paramêtre dans ladite fonction (ie: toujours la ligne 'my $bot = shift;').

    Va falloir faire un choix vieux: variable globale ou paramêtre modifiable ?

    Dans le cas d'un paramêtre modifiable, faut passer une référence sur une table de hachage en guise de paramêtre à ta fonction 'loadconf', mais tu le savais certainement déjà

    N'hésite pas si tu as des questions/interrogations

    PluX59
    P.S: Ah bah alors, a paumé la triforce ?

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    Merci PluX59, ca fonctionne impec

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Set POST="Résolu" alors (Y'a un bouton affiché sur chacune des lignes du sujet que tu as ouvert...n'a qu'à cliquer )

    Dis, juste en passant, tu ne serais pas fan de Zelda par pur hasard ?

    PluX59

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    Re

    J'ai une autre question maintenant j'arrive a afficher ma variable $bot dans tout le fichier mais comment faire pour la lire a partir d'un autre fichier ?

    J'ai utilisé 'use autre_fichier;' mais ca ne fonctionne pas

    J'ai ecrit mon fichier principal comme ceci:

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #!/usr/bin/perl
    #
    # Supa Bot IRC
    #
    #########################################################
     
    use strict;
    use warnings;
     
    # Supa modules
    use Divers;
     
    # Global vars
    my $bot;
     
    &loadconf(); # Lecture du fichier de configuration
    &sockopen($bot->{'serv'}, $bot->{'port'}); # Lancement du socket
     
    # Fin 
     
    Je me sert du fichier Divers.pm pour les fonctions:
    Le voici:
     
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use Main;
     
     
    # loadconf();
    # Initialisation de la configuration
    sub loadconf {
    	my $path = "supa.conf";
     
    	open(FILE,$path) or die("Impossible d'ouvrir $path : $!");
    	while (defined(my $text = <FILE>)) {
    		chomp($text);
    		if ($text =~ /^bot_([^ ]*) (.*)/) {
    			$bot->{$1} = $2;
    			}
    	}
    	close(FILE);
    }
     
     
    sub sockopen {
    	my $serv = shift;
    	my $port = shift;
    	print "Connexion sur $serv $port\n";
    }

    Un/Des idées sur mon soucis ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Re,

    Commence par remplacer 'my $bot' par 'our $bot' pour voir...

    Eh: t'es fan de Zelda ou pas ? (trop occupé à Perl pour me donner une réponse )... Juste en rapport avec ton pseudo

    PluX59

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    Re PluX,

    La derniere fois que j'ai joué à zelda c'etait sur adventure of link sur NES,
    disons que je suis un ancien mordu, j'ai pas suivi le reste de la saga, j'preferai les bons graphisme en 2d !!! lol

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    dans tout ca j'ai oublié de dire que même avec 'our $bot' ca ne fonctionne pas, de plus il me sort l'erreur:

    Compilation failed in require at Main.pm line 13.
    BEGIN failed--compilation aborted at Main.pm line 13.

    à cette ligne se trouve:
    use Divers;

    C'est dur mais j'adore ca !!!

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    probleme résolu en ajoutent '1;' a la fin du fichier Divers.pm

    Qand on utilise la commande 'use autrefichierfichier;' il faut que autrefichiersource retourne une valeur ?

    Je met le sujet en résolu quand même vu que mon 1er prob est réglé.

  10. #10
    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
    A mon avis, une variable globale qui traine comme ça c'est une erreur de conception... Ta première fonction était très bien, il suffisait de lui faire renvoyer ton $bot (pourquoi pas %bot d'ailleurs ?) pour régler le problème :
    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
     
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    # loadconf();
    # Initialisation de la configuration 
    sub loadconf {  
      my $path = "supa.conf"; 
      my %bots = @_;
     
      open my($file), '<', $path or die "Impossible d'ouvrir $path : $!";
     
      while (<$file>) {  
        chomp; 
        if ( m/^bot_([^ ]*) (.*)/ ) {  
          $bots{$1} = $2; 
          print "$1 = $2\n";  
        }  
      }  
      close($file); 
     
      return %bots
    }     
     
    my %conf = loadconf(  );   
     
    print "$conf{nick}\n";
    De plus la même solution résoud proprement ton autre problème.

    --
    Jedaï

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    Salut Jedai,

    en effet c'est beaucoup plus simple comme ca et aussi plus propre que c'que j'etais en train de faire, merci

    à bientôt

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    C'est encore moi et j'ai encore une autre question lol

    si je veux utiliser la variable $conf{nick} dans un autre fichier il faut necessairement que je redeclare dans cette autre fichier ceci:

    my %conf = loadconf();

    merci de votre aide en tout cas

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par Jedai
    A mon avis, une variable globale qui traine comme ça c'est une erreur de conception... Ta première fonction était très bien, il suffisait de lui faire renvoyer ton $bot (pourquoi pas %bot d'ailleurs ?) pour régler le problème :
    ...

    --
    Jedaï
    Tout à fait d'accord.

    Personnellement quand je débute sur un langage je fais du fonctionnel... Ensuite quand je pratique je fais du conceptuel... Mais pas trop quand même, hein

    PluX59

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

Discussions similaires

  1. Probleme de variable entre SQL et Php
    Par copin dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/06/2005, 10h58
  2. Réponses: 10
    Dernier message: 03/05/2005, 21h57
  3. [langage] Probleme de variable transfert de contenu
    Par Ludo167 dans le forum Langage
    Réponses: 10
    Dernier message: 08/07/2004, 11h40
  4. [algo]probleme de variables hotes ds un insert
    Par omega dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/03/2004, 09h03
  5. Réponses: 2
    Dernier message: 04/01/2004, 15h14

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