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

Modules Perl Discussion :

Net::Ping::External problème subroutine


Sujet :

Modules Perl

  1. #1
    Membre régulier
    Net::Ping::External problème subroutine
    Bonjour,

    sous strawberry je souhaite faire des tests de ping pour vérifier la présence d'équipement avec le module "Net:ing::External" ("Net:ing" sous strawberry ne fonctionne pas à priori pour l'icmp et des équipements ne répondent pas au requêtes TCP par défaut port 7).

    Quand je fais des tests simple, ca fonctionne.

    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
    use strict;
    use strict;
    use warnings;
    use feature 'say';
    use Data:<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />umper;
    no warnings 'uninitialized';
     
    use Net:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />ing::External qw(ping);
     
    my $IP = '10.80.20.252'; 
    my $p = ping(host => "$IP");
    if ($p eq 1) {
    	print "$p is alive\n";
    } else {
    	print "$p is unreacheable\n";
    	}



    Résultat:
    C:\XXX>perl test.pl
    0 is unreacheable

    ## Avec une autre IP destination ##
    C:\XXX>perl test.pl
    1 is alive


    Quand je veux l'utiliser dans une subroutine pour des besoins futurs ca me plante strawberry, toute la mémoire est utilisée.

    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 warnings;
    use feature 'say';
    use Data:<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />umper;
    no warnings 'uninitialized'<img src="images/smilies/icon_wink.gif" border="0" alt="" title=";)" class="inlineimg" />;
     
    use Net:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />ing::External qw(ping);
     
    my $IP = '10.80.20.252'; 
     
    sub ping {
    my $PI = shift;
    my $p = ping(host => "$IP");
    if ($p eq 1) {
    	print "$p is alive\n";
    } else {
    	print "$p is unreacheable\n";
    	}
    }	
     
    ping($IP);


    Résultat:
    C:\XXX\SCRIPT>perl test.pl
    Subroutine ping redefined at test.pl line 11.
    Deep recursion on subroutine "main::ping" at test.pl line 13.
    10.80.20.252

    Cela vient du module ou j'ai raté quelque chose ?

    Merci.

  2. #2
    Membre habitué
    Je vois juste une erreur de typo :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    sub ping {
    my $PI = shift;

    tu définis une variable nommée PI et plus loin tu appelles la variable IP

    pour le "Subroutine ping redefined", essaie de changer le nom (pas vraiment d'iédée sur ce point)

  3. #3
    Membre régulier
    Bon coup d'oeil, mais ce n'est pas ca, j'ai modifié et toujours le même message

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    my $IP = '10.80.20.252'; 
     
    sub ping {
    my $IP = shift;
    my $p = ping(host => "$IP");
    if ($p eq 1) {
    	print "$IP is alive\n";
    } else {
    	print "$IP is unreacheable\n";
    	}
    }	
     
    ping($IP);


    Subroutine ping redefined at test.pl line 11.
    Deep recursion on subroutine "main::ping" at test.pl line 13.

  4. #4
    Membre habitué
    ligne 5 : une parenthèse en trop,
    il faut redéfinir le nom de ta sous-routine : getPing par exemple, sinon tu refais appel récursivement à celle ci à ta ligne 13

    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 warnings;
    use feature 'say';
    use Data:<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />umper;
    no warnings 'uninitialized';
     
    use Net:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />ing::External qw(ping);
     
    my $IP = '10.80.20.252'; 
     
    sub getPing {
    my $IP = shift;
    my $p = ping(host => "$IP");
    if ($p eq 1) {
    	print "$p is alive\n";
    } else {
    	print "$p is unreacheable\n";
    	}
    }	
     
    getPing ($IP);


    Astuce : perl -c toto.pl permet de compiler ton script et de vérifier qu'il n'y a pas d'erreur de syntaxe.

  5. #5
    Membre régulier
    Arff oui, bien vu, c'était un problème de callback en boucle avec le nom ...

    Ca fonctionne maintenant avec le changement de nom

    Merci.