Ein Anfänger sollte erst "my" und "our" begriffen haben, bevor er anfängt mehrere "package" in einem File oder "local" zu benutzen.
Bei local stimmt ich dir zu, aber mehrere packages in einem File sind nicht ratsam. Ein package soll ja dazu dienen Modular zu arbeiten, dafür gibt es dann noch diverse andere Funktionen, vor allem use mit dem du solche Module einbinden kannst, aber nur wenn das package und die Datei gleich heißen (die Datei mit der Endung .pm), hast du mehrere packages in einem Modul hängen diese entweder zusammen (und nutzen dann auch evtl. gleiche Variabeln) oder dein ansatz ist falsch.
Außerdem brauchst du "our" oder "use vars" wenn du unter "use strict" Packagevariablen nutzen willst.
use var sollte vermieden werden.
Auch "global" ist etwas missverständlich...folgendes Beispiel zeigt dass man mit "my" sehr wohl (File-)globale Variablen deklarieren kann,
Mit my deklarierte Variabeln sind immer im ganzen File global wenn sie nicht in einem Block deklariert sind.
use vars qw($vars1 $vars3);
Dafür solltest du our verwenden.
Ausgabe mit use strict
Global symbol "$my2" requires explicit package name at /tmp/tst.pl line 17.
Global symbol "$our2" requires explicit package name at /tmp/tst.pl line 18.
Global symbol "$vars2" requires explicit package name at /tmp/tst.pl line 19.
Wenn du die deklaration des Subs hinter der Variabelndeklaration plazierst, dann läuft das auch unter strict.
und nochmal, globale Variabeln sind sehr sparsam zu verwenden, am besten zu vermeiden. Es gibt bessere Mechanismen
Struppi.