Ich habe ein Programm mit einer while-Schleife, die mehrere Punkte hat, wo bestimmte Bedingungen erfordern, dass etwas unternommen wird und dann der Rest der Iteration übersprungen wird.Beenden einer Iteration einer Schleife aus einer Subroutine
Da dies immer der gleiche Code sein wird, wollte ich es in eine Unterroutine einfügen, aber wenn ich 'next;' Als letzte Anweisung in der Subroutine erhalte ich eine Warnung (Subroutine wird durch next at ... beendet), obwohl es so zu funktionieren scheint wie beabsichtigt.
d.h. ohne sub:
while (#condition) {
## do stuff
if (#condition to skip iteration) {
## action
next;
}
## do more stuff, with the above block repeated several times
}
mit sub:
while (#condition) {
## do stuff
&skip if (#condition to skip iteration);
## do more stuff, with more calls to &skip
}
sub skip() {
## action
next;
}
Der Rest des Codes in dem Block/sub ist so kurz, dass alle bis auf den nächsten setzen; Die Anweisung in einem Unterprogramm vereitelt ziemlich das Objekt der Verwendung eines Unterprogramms.
Meine Frage ist:
- Ist mit 'next;' in einem Unterprogramm auf diese Weise in Ordnung, oder ist es gefährlich/schlechte Praxis?
- Gibt es eine bessere Möglichkeit, den Rest der Iteration von einer Subroutine zu überspringen?
- Wenn es in Ordnung ist und es keinen besseren Weg gibt, gibt es eine Möglichkeit, die Warnung zu unterdrücken?
Warum verwenden Sie die runden Klammern beim Unterspringen? Keine Notwendigkeit, Prototyping oder Signaturen hier zu verwenden. Vielleicht weniger verwirrend, sie zu entfernen. – jmmeier