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

Modules Perl Discussion :

Net::Ping::External problème subroutine


Sujet :

Modules Perl

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut 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::Dumper;
    no warnings 'uninitialized';
     
    use Net::Ping::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::Dumper;
    no warnings 'uninitialized';);
     
    use Net::Ping::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é
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 84
    Points : 197
    Points
    197
    Par défaut
    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
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    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é
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 84
    Points : 197
    Points
    197
    Par défaut
    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::Dumper;
    no warnings 'uninitialized';
     
    use Net::Ping::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
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    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.

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

Discussions similaires

  1. Undefined routine avec le module Net::Ping::External
    Par vercetty92 dans le forum Modules
    Réponses: 2
    Dernier message: 08/01/2010, 14h33
  2. net::ftp perl problème de mget
    Par mollux dans le forum Modules
    Réponses: 1
    Dernier message: 15/06/2006, 13h43
  3. [VB .NET] [Crystal reports] Problème impression
    Par Nicolas2005 dans le forum SDK
    Réponses: 1
    Dernier message: 09/11/2005, 12h35
  4. [CR .Net]Étiquette postal - Problème de marge
    Par theflamme dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 25/05/2005, 09h50
  5. [reseaux]Net::Ping et $ret
    Par Warren@TI dans le forum Programmation et administration système
    Réponses: 7
    Dernier message: 22/12/2004, 12h03

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