Thread use und OO verwirren mich: liegt wahrscheinlich am Namespace (4 answers)
Opened by macMeck at 2003-10-13 15:59

macMeck
 2003-10-13 15:59
#62791 #62791
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Hallo,

kann mir mal bitte jemand folgendes Problemchen erklären und mir vielleicht weiterhelfen? Ich stehe momentan voll auf dem Schlauch.

Also ich hab folgendes Programm:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#/usr/bin/perl -w

use strict;
use diagnostics;
use warnings;

use myModule 0.02;
use myZweitesModule 0.01;

print "myModule-Version ist : $myModule::VERSION\n";
print "myZweitesModule-Version ist: $myZweitesModule::VERSION\n";
und folgende beiden Module dazu:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
package myModule;
use strict;
use diagnostics;
use warnings;

use Exporter;

our @ISA = qw (Exporter);
our @EXPORT = qw ($VERSION);

our $VERSION = 0.02;

1;

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
package myZweitesModule;
use strict;
use diagnostics;
use warnings;

use Exporter;

our @ISA = qw (Exporter);
our @EXPORT = qw ($VERSION);

our $VERSION = 0.01;

1;


Zunächst einmal passiert genau das, was man erwartet. Ausgabe ist
myModule-Version ist : 0.02
myZweitesModule-Version ist: 0.01


Wenn ich jetzt in myZweitesModule myModule mit use einbinde und zwar VOR der package-Definition von myZweitesModule passt auch noch alles und die Ausgabe ist die gleiche.
Wenn ich myModule in myZweitesModule allerdings hinter der package-Definition einbinden kommt die folgende Ausgabe:
myModule-Version ist : 0.01
myZweitesModule-Version ist: 0.01

myModule sagt jetzt es wäre Version 0.01, jedoch bricht der Compiler nicht ab, obwohl Version 0.02 verlangt wird.

Ganz ominös wird das ganze jedoch wenn man aus diesem Zustand heraus im Hauptprogramm vom Modul myModule Version 0.03 verlangt. Dann bricht der Compiler ab und meldet, dass er nur Version 0.02 zur Verfügung hat.

Das hängt doch bestimmt mit den Namespaces zusammen oder so... Kann mir jemand auf die Sprünge helfen???

macMeck
It all works, as long as it's documented!

View full thread use und OO verwirren mich: liegt wahrscheinlich am Namespace