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 :

table de hash


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut table de hash
    Bonsoir à tous,

    J'ai un petit soucis, voici mon probleme:
    J'ai un fichier principale 'services.pl' ou je lance toutes les taches a effectuées
    voici le code source de ce fichier:

    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
     
    use strict;
    use Socket;
     
    # Modules necessaire
    use Divers;
    use Connection;
     
    # table de hash
    my %config;
    my %access;
     
    # stockage de la configuration et des accés dans les tables
    Divers::load_config(\%config);
    Divers::load_access(\%access);
     
    # creation du socket et connexion vers irc
    Connection::build_sock;
     
    # mise en arriere plan
    Divers::fork;
    Je fais appel dans ce fichier d'un autre fichier (package) 'Divers.pm'
    fichier dans lequel je créer mes tables config et access, 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
    30
    31
     
    package Divers;
    use strict;
     
    sub load_config
    {
    	my ($config) = shift;
    	my $path = "config/uworld.conf";
    	open(FILE, "$path") or die "load_config() erreur: $!";
    	while(my $line = <FILE>)
    	{
    		chomp($line);
    		if ($line =~/^uw_(.+?)=(.+?)$/)
    		{
    			$config->{"$1"} = "$2";
    		}
    	}
    	close(FILE);
    }
     
    sub load_access
    {
    	print "Je lis les accés\n";
    }
     
    sub fork
    {
    	print "Je fork\n";
    }
     
    1;
    Alors tout fonctionne bien, ce que je voudrai faire c'est pouvoir réutiliser une table créer dans Divers.pm (la table %config) dans le fichier 'services.pl' ou un autre fichier pouvez vous m'eclairer ?

    désolé si ma question est stupide mais j'ai lu la faq perl et j'ai toujours pas trouvé ...

    en tout cas merci

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    ce que je voudrai faire c'est pouvoir réutiliser une table créer dans Divers.pm (la table %config) dans le fichier 'services.pl' ou un autre fichier pouvez vous m'eclairer ?
    Je suis peut être un peu fatigué mais c'est déjà ce que tu fais, non ? Tu passes une référence (\%config) à ta fonction loadconfig() – peu importe que cette dernière soit dans divers.pm – tu peux donc continuer à l'utiliser dans ton script services.pl.

    Pour t'en persuader rajoute un après l'appel à loadconfig() dans services.pl.

    Ou alors je n'ai rien compris, ce qui est fort possible.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    Salut iblis

    oui en effet ca fonctionne , je n'arrivai pas a afficher $config->{parametre} mais en fait il faut le faire comme ceci %config->{parametre} , au passage peut tu m'expliquer la difference entre quelque chose du stye $config{param} et $config->{param} a quoi sert le -> ?

    a plus

  4. #4
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Bonsoir.

    En attendant que des personnes plus compétentes te donnent tous les détails, je te dis comment je vois ça.

    Dans un cas tu travailles sur un tableau associatif (ou hash), dans l'autre sur une référence à un tableau associatif. La syntaxe pour l'accès aux valeurs varie en fonction.

    Pour plus de clarté, considère le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my %hash = ('key1', 'value1', 'key2', 'value2');
    my $href = \%hash;
    print $hash{'key1'}."\n";
    print $href->{'key1'}."\n";
    Dans ton cas (réutilises-tu un code existant ?) tu passes à loadcong() une référence à %config. Dans loadconfig(), tu traites un scalaire, $config, (en perl le typage est marqué syntaxiquement) qui contient une référence sur un hash, d'où la syntaxe avec -> lors de l'accès. Mais quand tu accèdes directement à ton hash (le problème c'est que tu as utilisé le même nom pour le hash et la référence, source de confusion) pas de ->. L'exemple ci-dessus dit tout cela plus clairement.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    Hi

    En fait ce que je voudrai c'est créer une table hash $config{parametre} qui contiendrai les valeurs recoltées dans mon fichier configuration et qui sont declarées dans la fonction loadconfig() et pouvoir reutiliser ces hash dans n'importe quel fichier de mon programme. ou faire un truc plus propre genre:

    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
     
    sub load_config
    {
    	my $path = "config/uworld.conf";
    	open(FILE, "$path") or die "load_config() erreur: $!";
    	while(my $line = <FILE>)
    	{
    		chomp($line);
    		if ($line =~/^uw_(.+?)=(.+?)$/)
    		{
    			$config{"$1"} = "$2";
    		}
    	}
     
    	# pour faire plus propre je declare les elements de la table config dans des variables scalaires
    	$serveur_ip = $config{'ip'};
    	$serveur_port = $config{'port'};
    	# etc ... avec tout le reste de la configuration
     
    	close(FILE);
    }
    dans le cas du code ci-dessus ce serait les variables $serveur_ip et $serveur_port que je voudrai utiliser dans un autre fichier .
    Je suis désolé si je ne suis pas vraiment clair.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    Hi

    En fait ce que je voudrai c'est créer une table hash $config{parametre} qui contiendrai les valeurs recoltées dans mon fichier configuration et qui sont declarées dans la fonction loadconfig() et pouvoir reutiliser ces hash dans n'importe quel fichier de mon programme. ou faire un truc plus propre genre:

    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
     
    sub load_config
    {
    	my $path = "config/uworld.conf";
    	open(FILE, "$path") or die "load_config() erreur: $!";
    	while(my $line = <FILE>)
    	{
    		chomp($line);
    		if ($line =~/^uw_(.+?)=(.+?)$/)
    		{
    			$config{"$1"} = "$2";
    		}
    	}
     
    	# pour faire plus propre je declare les elements de la table config dans des variables scalaires
    	$serveur_ip = $config{'ip'};
    	$serveur_port = $config{'port'};
    	# etc ... avec tout le reste de la configuration
     
    	close(FILE);
    }
    dans le cas du code ci-dessus ce serait les variables $serveur_ip et $serveur_port que je voudrai utiliser dans un autre fichier .
    Je suis désolé si je ne suis pas vraiment clair.

  7. #7
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    :Une fois encore, je pense que ce que tu faisais au début est bon : déclarer un hash, passer sa référence à une routine qui y charge les données lu d'un fichier, continuer le traitement. En gros comme ça (c'est ton premier code à peine modifié et c'est fonctionnel)
    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
    use strict;
     
    my %config;
    load_config(\%config);
     
    # processing
    map {print "$_ $config{$_}\n"} sort keys %config;
     
    sub load_config
    {
        my ($confref) = shift;
        while(my $line = <DATA>)
        {
            chomp($line);
            if ($line =~/^uw_(.+?)=(.+?)$/)
            {
                $confref->{"$1"} = "$2";
            }
        }
    }
     
    __DATA__
    uw_x=1
    uw_y=2
    uw_z=3
    Dans le dernier code que tu fournis tu ne passes plus ton à hash à load_config(), là, oui, à mon avis, il y a un problème.

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

Discussions similaires

  1. tableau de tables de hash référence perl
    Par sbtrinity dans le forum Langage
    Réponses: 11
    Dernier message: 12/03/2012, 14h02
  2. table, liste, hash et tout et tout.. pour débutant
    Par Eric5959 dans le forum Langage
    Réponses: 22
    Dernier message: 01/08/2008, 09h16
  3. Table de hash limité ??
    Par elbrujo2323 dans le forum Langage
    Réponses: 14
    Dernier message: 17/01/2008, 21h32
  4. Table de hash et package.
    Par Marty000 dans le forum Langage
    Réponses: 2
    Dernier message: 25/01/2007, 09h52
  5. Tables de hash
    Par miss8 dans le forum C
    Réponses: 2
    Dernier message: 16/11/2002, 17h44

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