Forum Programmation.perl 2 actions dans un "die"

Posté par  (site web personnel) .
Étiquettes : aucune
0
19
juil.
2006
Hello,

j'ai un petit soucis avec die : je voudrais que lorsqu'un "open" ne fonctionne pas, die m'écrire et log et sorte avec "-1"

donc j'ai une ligne comme ca :


opendir(DSTREPORT,$destreport)or die (meurt("Impossible d'ouvrir le répertoire $destreport... $!");return -1);


mais il n'en veux pas.... si je ne met que l'appel vers "meurt" ou le "return -1", ca fonctionne mais pour les deux en meme temps ya pas moyen...

ya t'il une syntaxe particulière que j'ai raté ? ou peut etre une autre facon de le faire...
  • # oupssss....

    Posté par  (site web personnel) . Évalué à 1.

    ARFFEUUUUU mauvais forum :'(

    désolé, je voulais l'envoyer dans "programmation.perl" mais je suis pas habitué a devoir choisir la section dans un menu avant de poster :p

    quelqu'un as les droits pour le déplacer ?
  • # quel langage ?

    Posté par  . Évalué à 0.

    salut,

    c'est dans quel langage ?
  • # Désolé, mais...

    Posté par  . Évalué à 2.

    ... RTFM !

    $ perldoc -f die

    die LIST
    Outside an "eval", prints the value of LIST to "STDERR" and exits with the current value of $! (errno).

    $ perldoc -f return

    return EXPR

    return Returns from a subroutine, "eval", or "do FILE" with the value given in EXPR.

    Donc forcément quand l'un est executé, l'autre ne peut pas l'être. En inversement.
    • [^] # Re: Désolé, mais...

      Posté par  . Évalué à 1.

      Juste un petit rappel pour la valeur de retour, elle est sur 8 bits et doit donc etre non signée et entre 0 et 255. Une condition qui teste si le process est sorti avec -1 ne sera jamais vraie. (-1 retournant 255)

      Plus d'infos sur:

      man 2 wait
      perldoc perlvar -> chercher pour $?
      • [^] # Re: Désolé, mais...

        Posté par  (site web personnel) . Évalué à 1.

        ok merci pour les infos :) j'ai un peu modifié mon fonctionnement ... maintenant je ré-écris le fonctionnement de die en début de fichier local $SIG{'__DIE__'} = sub { if($DEBUG==1){ open(DEBUG_FILE,">>.\\logs\\debug_TBvir.txt")or die $!; print DEBUG_FILE "SUB_RAPATRIEMENT_LOGS ==> $_[0]\n"; close DEBUG_FILE; } $retour = -1; die $_[0]; }; avec $retour qui est un pointeur vers mon interface (donc pas de soucis sur les 8 bit du return ;) ) et j'appel mon die comme ca : open-gnagnagna or eval{die"Impossible de copier le fichier $fichier_source... $!"}; et hop ca marche comme je veux :) merci de vos aides
        • [^] # Re: Désolé, mais...

          Posté par  (site web personnel) . Évalué à 2.

          Euh je ne voudrait pas etre casse-bonbon mais une fonction


          sub arg($) {
          print STDERR $_;
          if ($DEBUG > 0 &&
          open(DEBUG_FILE, ">>.\\logs\\debug_TBvir.txt")) {
          print DEBUG_FILE $_;
          close DEBUG_FILE; # optionnel vu que de toute façons on a un exit qui traine
          } else {
          print STDERR "Impossible d'ouvrir le fichier de log: $!";
          }
          exit -1
          }

          open TOTO, "turc" or arg ("Impossible bidulle, chose $!");



          Mais si j'analyse bien ton code tu utilise die mais tu le protege avec eval{}
          donc tu ne meurt jamais ??? auquel cas il faut remplacer 'exit -1' par '$retour = -1;'
          Un peu etrange tout ca quand meme proteger un die ...
        • [^] # Re: Désolé, mais...

          Posté par  . Évalué à 2.

          Il ya uns discussion en ce moment sur la liste perl@mongueurs.net sur justement l'execution de code avant un die. Parmi les solutions, il y a le module Religion.pm. http://search.cpan.org/~kjalb/Religion-1.04/Religion.pm
          • [^] # Re: Désolé, mais...

            Posté par  (site web personnel) . Évalué à 1.

            en fait je viens de m'appercevoir que mon code est pas super propre... hélas...

            mais j'ai pas le temps de corriger tout ca pour le moment (fin de stage approche) alors je réparerais tout ca dans la V2

            jigso => j'ai voulu m'inscrire a la liste des mongueurs.... jamais réussi

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.