Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Retourner aux forums || Retourner au forum Programmation.perl

Programmation.perl : 2 actions dans un "die"

Posté par Julien Vehent (Jabber id, page perso, ) le 19 juillet 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...

--
www.linuxwall.info
> Lire le message (8 commentaires, moyenne: 1,3).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

oupssss....

Posté par Julien Vehent (Jabber id, page perso, ) le 19/07/2006 à 09:57. (lien). É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 ?

--
www.linuxwall.info

quel langage ?

Posté par goeb (page perso, ) le 19/07/2006 à 09:57. (lien). Évalué à 0.

salut,

c'est dans quel langage ?

--
goeb

Désolé, mais...

Posté par jigso () le 19/07/2006 à 09:59. (lien). É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 duaner () le 19/07/2006 à 11:42. (lien). É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 Julien Vehent (Jabber id, page perso, ) le 19/07/2006 à 12:25. (lien). É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

      --
      www.linuxwall.info
      • [^]Re: Désolé, mais...

        Posté par -=[ Benoit Plessis ]=- (page perso, ) le 20/07/2006 à 09:20. (lien). É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 ...

        --
        Il [e2fsck] a bien démarré, mais il m'a rendu la main aussitot en me disant "houlala, c'est pas beau à voir votre truc, je préfèrerai que vous teniez vous même la tronçonneuse" (traduction libre)
      • [^]Re: Désolé, mais...

        Posté par jigso () le 20/07/2006 à 09:53. (lien). É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 Julien Vehent (Jabber id, page perso, ) le 20/07/2006 à 10:07. (lien). É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

          --
          www.linuxwall.info

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.perl