Thread Schreibfehler in Label
(14 answers)
Opened by barney at 2023-12-14 12:33
Das Buch "Perl Best Practices" verlangt die Verwendung einer Marke, wenn eine Schleife explizit verlassen wird, da hätte ich vermutet, dass auch eine Policy existiert, ich habe aber keine gefunden. Sinnvoll wäre das, weil Perl bei Labels sehr ... dynamisch ist.
Labels müssen zum Beispiel nicht eindeutig sein. Sie werden auch in anderen Dateien/Packages angesprungen, wenn da eine übergeordnete Schleife das Label definiert. Es gibt immerhin eine Warnung, wenn dabei ein Unterprogramm oder eval verlassen werden. Außerdem erlaubt next seit Perl 5.18 auch Ausdrücke als Sprungziel. Meine Konvention wäre: Labels sind in GROSSBUCHSTABEN zu schreiben und dürfen nur da angesprungen werden, wo sie auch lexikalisch definiert wären. Das könnte man dann auch statisch in einer Perl::Critic Policy prüfen. Ich habe mal ein bisschen mit PPI rumgespielt. Die Definition eines Label ist als PPI::Token::Label erkennbar, damit lässt sich ein Inventar der "erlaubten" Sprungziele für jeden Scope verwalten. Ein next oder redo ist erkennbar als PPI::Statement::Break, aber was danach kommt, ist in den folgenden Fällen immer ein PPI::Token::Word:
Da muss man also genau hinschauen: Perl "erlaubt" all das, meine Konvention nur die erste Variante und auch nur, wenn ein passendes PPI::Token::Label im "Scope" ist. |