Struppi: Beenden von Kontrollfluß-Ebenen

Beitrag lesen

"exit" an der passenden Stelle kann Dir ersparen, für die Alternative ein riesiges, unübersichtliches "if"-Konstrukt aufzubauen.

Denn zusammenhang versteh ich nicht. Wenn ich irgendwo ein exit einbaue, dann schreib ich keine if-Abfragen mehr?

Solte es zu so einem Fall kommen, dann ist wohl irgendwo der Wurm im Design.

Ich halte das kontrollierte Herausspringen aus Kontrollstrukturen keineswegs für "unsauber" - geeignet angewendet und hinreichend gut dokumentiert macht es den Quelltext sogar deutlich lesbarer.

Das Herrauspringen ist auf keinen Fall unsauber, aber das Beenden des Programmes an einer willkürlichen Stelle ist unsauber, zumal bei CGI Programmen, da der Client auf eine sinnvolle Ausgabe wartet.

Das mit "return" kapier ich nähmlich nicht ganz.

"return" setzt ebenfalls den Returncode, genau wie "exit". Aber es beendet nur die aktuelle Kontrollfluß-Ebene, nicht jedoch alle (wie exit). Wenn Du innerhalb einer Funktion "return" ausführen läßt, dann wird das Skript an der Stelle fortgesetzt, wo die zuvor aktive Funktion aufgerufen wurde - genauso, als hätte der Perl-Interpreter das Ende des äußersten Blocks dieser Funktion erreicht.

Was insbesondere bedeutet: Innerhalb des Hauptprogramms haben "return" und "exit" dieselbe Wirkung, weil dort nur eine Kontrollfluß-Ebene 'offen' ist.

Probier's mal:
#!/usr/bin/perl

return "TEST";
Can't return outside a subroutine at test.pl line 7.

selbst ohne strict und Warnung.

Struppi.