Thread Ausführungsreihenfolge (2 answers)
Opened by bianca at 2021-08-22 20:49

haj
 2021-08-22 22:43
#193555 #193555
User since
2015-01-07
527 Artikel
BenutzerIn

user image
Du weißt ja vermutlich selbst, dass das eine schräge Art ist, Subroutinen zu deklarieren. Du weißt vielleicht auch, was Du Dir damit einhandelst: Beim Aufruf von testsub werden immer alle in den BEGIN-Blöcken deklarierten Unterprogramme durchlaufen, unabhängig von den Bedingungen, in denen die BEGIN-Blöcke stehen. Wenn Du testsub aber ein zweites Mal mit anderen Daten in %over aufrufst, dann passiert gar nichts mehr. Der zweite Aufruf von testsub generiert ein neues, leeres Array @codes. Und das bleibt leer, denn die BEGIN-Blöcke werden nicht noch einmal ausgeführt.

Wenn Du die Warnung loswerden willst, dann kannst Du die Deklaration von my @codes; außerhalb (vor) sub testsub {...} verschieben, oder durch our @codes; ersetzen. Dann werden bei jedem Aufruf von testsub alle Unterprogramme mit den richtigen Daten durchlaufen.

Wenn Du aber bei jedem Aufruf von testsub neue Unterprogramme deklarieren willst, dann ist die Technik mit BEGIN unbrauchbar. Und, genau genommen, erst dann beißt Dich die Warnung. Denn solange die Unterprogramme eh nur einmal deklariert werden, ist es egal, ob @codes jedes Mal ein frisches Array ist.

View full thread Ausführungsreihenfolge