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 :

sortir d'une double fonction?


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 30
    Points : 16
    Points
    16
    Par défaut sortir d'une double fonction?
    Bonjour,

    voici mon petit pb :

    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
     
    sub create_env
    {
        sub launch_command
        {
            my $command = `$_[0] 2>&1`;
            if ($? !~ 0)
            {   
               return; 
            }   
        }  
        my $command1=&launch_command("touch /test");
        my $command2=&launch_command("touch /test2");
    }
     
    &create_env;
     
    suite du code....
    donc ce script doit lancer des commandes système, vous l'aurez compris.
    Vous voyez aussi que si la commande retourne une erreur, je fais un "return".

    mais mon pb est là : j'aimerai que lorsque j'appel ce "return", je ne fais pas que sortir de la fonction "launch_command" (sinon ca continu d'executer les autres commandes système, ce que je ne veux pas), mais que je sorte de la fonction "create_env" pour pouvoir executer "suite du code..."

    y'aurait il une technique particulière qui pourrait m'interresser?

    merci d'avance

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Points : 211
    Points
    211
    Par défaut
    Un truc du 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
     
    sub create_env
    {
        sub launch_command
        {
            my $command = `$_[0] 2>&1`;
            if ($? !~ 0)
            {   
               # Sortie en erreur
               return $?; 
            }   
             return 0;
        }  
        my $resultat=&launch_command("touch /test");
        ($command1 == 0) && $resultat=&launch_command("touch /test2");
    }
    ou
    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
     
    sub create_env
    {
        sub launch_command
        {
            my $command = `$_[0] 2>&1`;
            if ($? !~ 0)
            {   
               # Sortie en erreur
               return $?; 
            }   
             return 0;
        }  
        (my $resultat=&launch_command("touch /test")) || (print "Erreur lors de l'execution de touch /test" && return);
    }
    Ca dépend de ce que tu veux faire exactement, mais globalement, tu es obligé de tester ton status de retour et d'agir en conséquence.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    merci de ta réponse, en fait j'ai carément changer de technique, ca fait plus propre.

    je fais une liste que j'envoi dans un tableau , par contre j'aimerai avoir votre avis sur un autre souci en rapport avec cette nouvelle technique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     my @commands = qw (
                "touch /test";
                "du -sh /tmp";
        );
    si je fais un print de @commands il en ressort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "touch/test";"du-sh/tmp"
    en gros il me prends ET les " ET les ";" ET en plus il retire les espace.

    et comme ce sont des commandes systèmes, ca va être difficile....

    j'ai chercher mais n'ai rien trouver sur le traitement des espaces dans une liste...

    any idea?

    ps : merci encore pour ta contribution 50Nio

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my @commands = ( "touch /test", "du -sh /tmp");  
    # Afficher mes commandes
    foreach my $cmd ( @commands  ) {
      print "[$cmd]\n";
      #system($cmd);
    }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    c du bon, un grand merci.

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

Discussions similaires

  1. Sortir d'une double boucle FOR-END
    Par azboul dans le forum MATLAB
    Réponses: 4
    Dernier message: 05/12/2007, 11h07
  2. Réponses: 1
    Dernier message: 24/08/2007, 12h46
  3. Réponses: 16
    Dernier message: 05/10/2006, 16h51
  4. Sortir d'une boucle en fonction d'une durée
    Par BECHE dans le forum Langage
    Réponses: 8
    Dernier message: 30/11/2005, 11h08
  5. [Threads] Sortir d'une fonction bloquante
    Par guejo dans le forum MFC
    Réponses: 19
    Dernier message: 17/08/2004, 14h12

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