Thread Namespace/ Package Nervereien (16 answers)
Opened by Gast at 2006-01-10 17:12

sosum
 2006-01-10 18:46
#61622 #61622
User since
2006-01-10
11 Artikel
BenutzerIn
[default_avatar]
Ja... unfassbar... Ich quäle mich seit Monaten mit dem Zeugs herum, und mir fällt nicht einmal auf, dass es an der Schreibweise liegt....

hier der berichtigte lauffähige Code (mit sichtbarem Fehler bei "alternativer" (falscher) Schreibweise.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package hiermeinpaket;
# funktioniert nur innerhalb des Pakets korrekt.
sub printSth1 () {
my $value=shift;
print $value;
}

# Hm... selbes Problem...funktioniet nur innerhalb des Pakets korrekt
sub printSth2 () {
print $_[0];
#print $_[1];
}

# Funktioniert immer, aber so umständlich. Negativvergleich aus Perfomanegründen (hier nicht wichtig).
sub printSthDefinitely () {
my $value= shift;  
$value = shift unless ($value ne 'hiermeinpaket');
print $value;
}

sub intern () {  
print "interner Aufruf\n";
my $text = "hello welt\n";
&printSth1 ($text);
&printSth2 ($text);
&printSthDefinitely ($text);
}
&intern (); # läuft korrekt

##################################
package woanders;

sub extern () {
my $text = "hello welt\n";
print "\nexterner Aufruf\n";
&hiermeinpaket::printSth1 ($text);  # hui
&hiermeinpaket::printSth2 ($text);  # hui
&hiermeinpaket::printSthDefinitely ($text);  #hui

hiermeinpaket->printSth2 ($text);  # pfui
hiermeinpaket->printSthDefinitely ($text);  #hui
}
&extern (); # das Problem wird sichtbar.

sub vonHintenDurchDieBrust () {
print "\nBrustmethode\n";
my $text = "hello welt\n";
package hiermeinpaket; # HÖ-HÖ
&printSth1 ($text);
&printSth2 ($text);
&printSthDefinitely ($text);
}
&vonHintenDurchDieBrust(); # TSE... alles fein?


Schuld an meiner Misere war offensichtlich die Verwendung der objektorienten Schreibweise "->", vermute ich. Ich fand das schicker und dachte, sie sei äquivalent zu &abc::. Dem ist offensichtlich nicht so.

Danke für die Erleuchtung :)

View full thread Namespace/ Package Nervereien