Hallo Benny,
bevor ich auf die Frage eingehe, eine kleine Anmerkung zu Ihrem Script.
Einfacher und eleganter lässt es sich lösen indem Sie den Artikelindex benutzen, welcher dem Script in jedem Fall als erster Parameter übergeben wird.
Eine einfache Funktion um die Artikel zu nummerieren könnte also folgendermaßen aussehen:
<!--spmacro:module(test)
sub nummerieren {
my $index = shift; # Hier der angesprochene erste Parameter(Artikelindex)
$index ++; # Da der Artikelindex bei 0 startet muss er noch um 1 erhöht werden.
main::mprint($index);
}
-->
Die Funktion __test::nummerieren__ wird weiter per loopitem ausgegeben.
Nun zu Ihrer Frage, warum Variablen mit dem Wort "my" deklariert werden:
Fehler findenDer erste Vorteil den die Deklaration per "my" mit sich bringt ist, dass Tippfehler im Script schneller erkannt werden können.
Dies ist jedoch nur der Fall, wenn zudem auch noch die Anweisung "use strict" am Anfang des Scripts verwendet wird.
Würde man ohne "my" und ohne "use strict" folgenden Code schreiben,
$zahl = 3;
$zahl = $zahl * $zahl;
print $zal;
würde die Ausgabe " " lauten, da ein Tippfehler vorliegt und die Variavle $zal keinen Wert hat.
Schreibt man jedoch folgenden Code,
use strict;
my $zahl = 3;
$zahl = $zahl * $zahl;
print $zal;
erhält man diese Fehlermeldung,
Global symbol "$zal" requires explicit package name
welche darauf hinweist, dass die Variable $zal noch nicht richtig deklariert wurde.
Gültigkeit der VariablenDie Deklaration mit "my" verhindert außerdem, dass globale Variablen durch Wiederverwendung des Variablennamens ohne es zu wollen überschrieben werden.
Hierzu auch ein kleines Beispiel:
Ohne "use strict" und "my",
$zahl = 3;
if ($zahl == 3){
$zahl = 5;
print $zahl. "\n";
}
print $zahl;
würde die Ausgabe
5
5
lauten, da die globale Variable $zahl, welche ganz zu Anfang deklariert wurde in der in der Anweisung des if-Blocks überschrieben wird.
Verwendet man jedoch "use strict" und "my",
use strict;
my $zahl = 3;
if ($zahl == 3){
my $zahl = 5;
print $zahl. "\n";
}
print $zahl;
lautet die Ausgabe,
5
3
da die Variable durch die deklaration mit "my" mehrfach im Speicher vorhanden sein kann.
Es kann also nicht passieren, dass man ausversehen globale Variablen überschreibt, welche im späteren Programmablauf noch benötigt werden.
Kann das irgendwelche Einflüsse auf die Funktionalität des Shops haben, wenn ich die nicht mit my deklariere?
Nein, es kann keine Auswirkungen auf den Shop haben, da Sie Variablen welche in den Shop-Scripten verwendet werden über den Modulnamen ansprechen müssten, um diese zu verändern.
Dennoch würde ich Ihnen aus oben genannten Gründen empfehlen "use strict" und "my" in Ihren Scripten zu verwenden.
mfg
cru