Hi Siechfred,
ich kann leider momentan nicht viel Zeit investieren, (jetzt wo ich denke es begriffen zu haben ;), aber ich denke du priorisierst falsch.
Ein Anfänger sollte erst "my" und "our" begriffen haben, bevor er anfängt mehrere "package" in einem File oder "local" zu benutzen. Außerdem brauchst du "our" oder "use vars" wenn du unter "use strict" Packagevariablen nutzen willst. Die Symboltabelle braucht ein Anfänger erst zuletzt kennenzulernen.
Auch "global" ist etwas missverständlich...folgendes Beispiel zeigt dass man mit "my" sehr wohl (File-)globale Variablen deklarieren kann, wenn der Gültigkeitsbereich/Scope auch das ganze File umfasst (hier $my1 und $my2). Die Unterscheidung zwischen privat und öffentlich ist m.E. die entscheidende. Die $my sind jetzt fürs File privat (!), die anderen könnte ich aber auch aus anderen Files manipulieren, weil öffentlich.
use strict;
($\,$,)=("\n",",");# Newline und Komma bei prints
use vars qw($vars1 $vars3);
my $my1="my1";
my $my3;
our $our1="our1";
our $our3;
$vars1="vars1";
sub print_globals {
print $my1,$my2,$my3;
print $our1,$our2,$our3;
print $vars1,$vars2,$vars3;
}
my $my2="my2";
$my3="my3";
our $our2="our2";
$our3="our3";
use vars qw($vars2);
$vars2="vars2";
$vars3="vars3";
print_globals();
# Ausgabe ohne use strict
#: my1,,my3
#: our1,our2,our3
#: vars1,vars2,vars3
# 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.
Gruß
Kurt