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

Programmation et administration système Perl Discussion :

PERL - Comparaison de deux valeurs


Sujet :

Programmation et administration système Perl

  1. #1
    Membre régulier

    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 80
    Points
    80
    Par défaut PERL - Comparaison de deux valeurs
    Hello tout le monde !!

    Je fais appel à vous car je ne connais strictement rien en PERL et que je dois modifier un script écrit en perl.

    Je vous explique...

    Mon but est de récupérer des valeurs via SNMP (ça c'est ok), ces valeurs sont des chiffres, ensuite je la compare à une autre (et c'est là que je merde !).

    Ces valeurs sont des numéros de port de switch réseau. J'ai déjà testé avec des Print et je récupérè bien tout ce qu'il faut mais je n'arrive pas à faire ma comparaison.

    Je sais que ça doit être un truc tout bête mais je suis un peu perdu dans ce langage

    Voici le bout de 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
    32
    33
    #=== Get Alias ====
    my $result2 = $session->get_table(
                              -baseoid          => $mib{"ifalias"},
                           );
    my $key2;
    my $value2;
    my @AdminShut;
      while (($key2, $value2) = each %{$result2}){
        my @split2=split(/\./,$key2);
        $key2 = $split2[-1];
        if ($value2 =~ /##/ and $key2 < $opt_N){
            print($key2); # -- Jaffiche ma valeur
            push(@AdminShut,$key2); # -- jexporte dans un tableau
        }
    }
     
    #=== Get list of switch id in the stack ====
    my $result = $session->get_table(
                              -baseoid          => $mib{"ifacestatus"},
                           );
    my $key;
    my $value;
    my $countdown=0;
    my @down;
      while (($key, $value) = each %{$result}){
        my @split=split(/\./,$key);
        $key = $split[-1];
        if ($value == 2 and $key != $key2){ # -- je compare key a key2 ----- source du probleme !!
              &debug("Interface $key is administratively down\r\n",$value);
              $countdown++;
              push(@down,$key);
            }
    }
    Quand je lance mon script j'obtiens le message d'erreur suivant :

    Use of uninitialized value in numeric eq (==) at ./bak-check_port_shutdowned.pl line 176.
    Use of uninitialized value in numeric eq (==) at ./bak-check_port_shutdowned.pl line 176.


    La ligne 176 correspond à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($value == 2 and $key != $key2){ # -- je compare key a key2 ----- source du probleme !!
    Dans $key2 et $key il n'y a que des valeurs numériques normalement.

    Dans mon exemple $key2 contient le chiffre 4 et 5 et $key les chiffres allant de 1 à 200.

    Je vous remercie pour votre aide !

    A+

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Bonjour,

    Et qu'est-ce qui te fait dire que c'est la comparaison de key à key2 qui pose problème ?

    Pourquoi cela ne serait pas la comparaison de values à 2 ?
    Cordialement.

  3. #3
    Membre régulier

    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    Et qu'est-ce qui te fait dire que c'est la comparaison de key à key2 qui pose problème ?

    Pourquoi cela ne serait pas la comparaison de values à 2 ?
    Bonjour,
    Parce que dans le script original c'était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($value == 2 and $key < $opt_N){
    et ça fonctionnait bien.

    Le problème c'est que $key2 fait partie d'un tableau et je ne sais pas traiter ces valeurs.

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Je ne comprends pas la logique de ton programme.

    Dans ta première boucle while, $key2 prend successivement toute une série de valeurs que tu stockes dans le tableau @AdminShut dont, curieusement, tu ne te sers pas ensuite.

    Dans ta second boucle while, tu ne touches plus à $key2, qui conserve donc a priori la dernière valeur de $key2 obtenue dans la première boucle while. C'est un peu étrange, est-ce vraiment ce que tu veux faire? Si oui, essaie d'imprimer $key2 avant d'entrer dans la seconde boucle while, elle n'est sans doute pas définie à ce moment. L'autre possibilité (un peu moins probable, mais à ne pas exclure), c'est que ce soit $key qui ne soit pas défini à ce moment-là.

    Mais il est très difficile de t'aider sans voir le contenu des données sur lesquelles tu travailles pour comprendre ce que tu essaies de faire et d'extraire. Pourrais-tu donner le contenu de $result et $result2 (par exemple en l'imprimant avec le module Data:umper) après les appels respectifs de la méthode $session->get_table?

  5. #5
    Membre régulier

    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 80
    Points
    80
    Par défaut SOLUTION
    Bonjour,

    J'ai trouvé la solution. Je compare les deux listes :

    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
    #=== Get list of switch id in the stack ====
    my $result = $session->get_table(
    						  -baseoid          => $mib{"ifacestatus"},
    					   );
    my $key;
    my $value;
    my @valfind;
      while (($key, $value) = each %{$result}){
    	my @split=split(/\./,$key);
    	$key = $split[-1];
        if ($value == 2 and $key < $opt_N){
                &debug("Interface $key is administratively down\r\n",$value);
                push (@valfind,$key);
        }
     
    }
     
     
    #=== Get Alias ====
    my $result2 = $session->get_table(
                              -baseoid          => $mib{"ifalias"},
                           );
    my $key2;
    my $value2;
    my $countdown2=0;
    my @AdminShut;
      while (($key2, $value2) = each %{$result2}){
        my @split2=split(/\./,$key2);
        $key2 = $split2[-1];
        if ($value2 =~ /##/ and $key2 < $opt_N){
            push(@AdminShut,$key2);
        }
    }
     
    #=== Compare liste AdminShut - valfind
    my $countdown=0;
    my @down;
    foreach my $d (@valfind){
        my $flagfind=0;
        foreach my $n (@AdminShut){
            if ($d == $n){
                $flagfind=1;
            }
        }
        if ($flagfind==0){
            push(@down,$d);
            $countdown++;
        }
    }
    Merci et bonne continuation à tous !

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

Discussions similaires

  1. [XL-2007] erreur aléatoire de comparaison entre deux valeurs
    Par jean_jean dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/04/2012, 17h58
  2. help script perl comparaison de deux fichiers
    Par nosuperman dans le forum Langage
    Réponses: 51
    Dernier message: 21/03/2012, 09h11
  3. Réponses: 7
    Dernier message: 20/10/2009, 09h12
  4. Comparaison de deux valeurs numériques ne fonctionnant pas
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/01/2009, 14h17
  5. Comparaison de deux valeurs.
    Par Mobistar dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 21/03/2007, 15h55

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