Die Codeschnipsel die ich hier verwende können gerne für private Zwecke gebraucht werden.

Dieser Codeschnipsel ist zunächst nur ein Test. Zu beachten ist jedoch das use strict; und das use warnings;. Auch wenn dieses Script höchstwahrscheinlich keine Warnungen ausgeben wird und auch die "Exaktheit" bei einer Zeile Code, die nur was ausgibt, nicht von Relevanz ist, so sollte man diese 4 Wörter immer am Anfang seines Codes stehen haben.

Ein Beispiel warum dies so wichtig ist:

Dieser Code wird ohne Probleme funktionieren. Doch wenn man ihn modifiziert:

Wird Perl ihn nicht mehr compilieren, da er nun einige Fehler aufweist:

Global symbol "$line" requires explicit package name at foo.pl line 3.
Global symbol "$line" requires explicit package name at foo.pl line 4.
Global symbol "$line" requires explicit package name at foo.pl line 5.
Execution of foo.pl aborted due to compilation errors.

Doch wie Lösen wir dieses Problem? Ganz einfach - das "Zauberwort" ist my.

Passt man den Code nun dementsprechend an, sieht er in etwa so aus:

Nun, was ist passiert. Und was macht my überhaupt?

Zunächst sei einmal gesagt, dass my eine Funktion ist.

Hinweis Perldoc.perl.org/perlfunc.html

  • my EXPR
  • my TYPE EXPR
  • my EXPR : ATTRS
  • my TYPE EXPR : ATTRS

A my declares the listed variables to be local (lexically) to the enclosing block, file, or eval. If more than one value is listed, the list must be placed in parentheses.

Zitat Perldoc.perl.org

Sie deklariert eine Variable. Okay...

Vielleicht fragst du dich jetzt - Warum verwende ich dann strict und my wenn es auch ohne geht?

Um beim selben Beispiel wie vorhin zu bleiben, hier ein Beispiel bei dem klar wird, warum es sinnvoll ist:

Man beachte, dass in der Ausgabe $lne statt $line steht.

Würde man das Script mit use warnings ausführen, würde man folgende Fehlermeldung erhalten:

Name "main::lne" used only once: possible typo at foo.pl line 4.
Use of uninitialized value $lne in concatenation (.) or string at foo.pl line 4, <STDIN> line 1.

Wenn wir unseren Code nun um strict und my erweitern, er also so aussieht:

Erhalten wir beim Versuch das Script zu Compilieren folgende Ausgabe:

Global symbol "$lne" requires explicit package name at foo.pl line 5.
Execution of foo.pl aborted due to compilation errors.

Hey! Das ist gut! Wir bekommen direkt beim Compilieren einen Fehler. Wir kommen also erst gar nicht dazu, den Code mit möglichen Tippfehlern kaputt zu machen.

... Rechtschreibfehler bei der Variablendeklarierung sind, solange sie durchgehalten werden, .... na ja... eigentlich sind sie schlecht. Aber das ist ein anderes Thema.

Soviel Text nur wegen einem Bild... ich glaub, ich muss das rausnehmen

Copyright © Tomatenstau.de 2016