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

Gast Gast
 2006-01-10 17:12
#61620 #61620
So, nun nervt es mich endgültig. Ich bin jemand, der gern Sachen trennt, und auch deshalb gerne verschiedene Namensräume verwendet. In PERL geht das imho nur mit "package".

Was mich nervt  ist aber, dass die Variablenübergabe zwischen zwei Namensräumen so umständlich zu sein scheint. Grund ist, dass Argument im Fall des Aufrufs aus dem gleichen Namensraum der übergebene Parameter ist. Ruft man die Funktion ausserhalb des Namensraumes auf, so ist der erste Parameter aber der Paketname :(

KANN MAN DAS NET ABSTELLEN???  Der Paketname interessiert mich nun wirklich nicht. Ich weiss, welche Funktion ich aus welchem Paket aufgerufen habe ;)

Man nehme ein kurzes Stück Quellcode:
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
package hiermeinpaket;

# funktioniert nur innerhalb des Pakets korrekt.
sub printSth () {
 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 () {
 my $text = 'hello welt';
 &printSth1 ($text);
 &printSth2 ($text);
 &printSthDefinitely ($text);
}
&intern (); # läuft korrekt

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

sub extern () {
 my $text = 'hello welt';
 &hiermeinpaket::printSth1 ($text);  # pfui
 &hiermeinpaket::printSth2 ($text);  # pfui
 &hiermeinpaket::printSthDefinitely ($text);  #hui
}
&extern (); # das Problem wird sichtbar.

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


Ich kann mir nicht vorstellen, dass man die Eingaben mit "if"s im Fall unterschiedlicher Namensräume immer abfragen muss. Im Netz suche ich seit Uhrzeiten, aber meine Suchbegriffe bringen mich nicht weiter.

View full thread Namespace/ Package Nervereien