PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: Exit-Code des Perl-Skripts auf "0" setzen



tschloss
19-01-2007, 09:36
Hi,
wie kann ich den Exit-Code beeinflussen?

Nach meinen Recherchen gibt es für einen Ausstieg während des Programmablaufs nur "exit <value>". Hat exit irgendwelche Nachteile?
Laut Doku räumt exit auch noch ein wenig auf - wenn beim Aufräumen Fehler hochkommen, kann das den Return Code wieder beeinflussen.

Mit "die" kann ich scheinbar keinen Wert "0" erzeugen. Laut Perl-Buch setzt "die" den Wert von "$!", ist der "0", dann greift "$? >> 8", ist das auch "0", dann wird "255" gesetzt.

Und welchen return value hat das Programm, wenn es normal beendet. "0" vermute ich. Setzen am Programmende vermutlich auch mit exit.
Ist es sinnvoll, bei einem Problem ans Ende zu springen (statt exit oder die)?

Hintergrund: ich habe ein Mail-Verarbeitungsskript via always_bcc und aliases in meinen Postfix eingebaut. Es sendet eine Notification per XMPP, ist aber unkritisch. Wenn das Skript aber mit non-zero zurückkommt, denkt Postfix, dass was schiefging und informiert den Absender über ein Problem, welches er überhaupt nicht einordnen kann.
So würde ich gerne auch "0" zurückgeben, wenn der Jabber-Server nicht verfügbar ist und daher keine Notification stattfinden kann.

Danke für Vorschläge.

undefined
19-01-2007, 22:04
Wenn es sich um ein CGI Script handelt kannst du nicht innerhalb des Scripts abbrechen - in solchen fällen passiert genau das was du beschreibst.
Verwende statt dessen "goto" und Springe ans Script Ende oder bei mod_perl Apache->exit().
Achtung Verwende kein exit in Subroutinen das hat daß gleiche Resultat.
Hier ist ein die() mit einem Abfangen durch eval besser.
Ein exit ohne Status beendet mit 0

tschloss
20-01-2007, 10:13
Wenn es sich um ein CGI Script handelt kannst du nicht innerhalb des Scripts abbrechen - in solchen fällen passiert genau das was du beschreibst.
Verwende statt dessen "goto" und Springe ans Script Ende oder bei mod_perl Apache->exit().
Achtung Verwende kein exit in Subroutinen das hat daß gleiche Resultat.
Hier ist ein die() mit einem Abfangen durch eval besser.
Ein exit ohne Status beendet mit 0

Thx, das deckt sich mit meinen Erwartungen. Mache ich so.

(Es handelt sich um ein eigenständiges Skript (welches von Postfix aufgrufen wird).