Schrift
[thread]8861[/thread]

Namensraum als Skalar?



<< >> 5 Einträge, 1 Seite
Gast Gast
 2007-03-21 22:53
#75228 #75228
Hallo,
ich habe ein Modul mit mehreren Namensräumen und darin Subroutinen gleichen Namens, also etwa so:
Code: (dl )
1
2
3
4
package a;
sub test() {}
package b;
sub test() {}

Im Hauptprogramm greife ich dann so auf die Subs zu:
Code: (dl )
1
2
a::test();
b::test();

So weit, so gut.
Jetzt möchte ich aber den Namensraum in einem Skalar speichern und so etwas machen:
Code: (dl )
1
2
$x = "a";
$x::test();

Leider geht es so aber nicht.
Kurze Frage: Wie gehts denn?
Vielen Dank für eure Hilfe!
pq
 2007-03-21 23:08
#75229 #75229
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
am saubersten gehts wohl so:
Code: (dl )
1
2
3
4
sub foo::test { print "test" }
my $x = "foo";
my $sub = $x->can("test");
$sub->()

oder unsauberer:
Code: (dl )
1
2
3
4
sub foo::test { print "test" }
my $x = "foo";
no strict;
&{ $x . "::test"}

aber vielleicht willst du ja in wirklichkeit lieber objektorientiert arbeiten.\n\n

<!--EDIT|pq|1174511372-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Opaxtl
 2007-03-21 23:36
#75230 #75230
User since
2007-03-21
12 Artikel
BenutzerIn
[default_avatar]
Ich bin für alles offen. :)

Ich weiß über Perl-OOP aber nicht mehr als die OO-Nutzung des CGI-Moduls. Aber wenn es viel eleganter gehen sollte....
pq
 2007-03-22 00:01
#75231 #75231
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
nun ja, für dieses eine problem ist es overkill, aber vom design her
klingt es halt nach OO, wenn man abhängig vom namensraum eine funktion
ausführen will.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
bloonix
 2007-03-22 11:07
#75232 #75232
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
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
use strict;
use warnings;

# Objekte mit new() erzeugen
my $a = new a;
my $b = new b;

# Methoden aufrufen
$a->test();
$b->test();

package a;

sub new {
  return bless {}, $_[0]
}

sub test {
  my $self = shift;
  print "test"
}

package b;

sub new {
  return bless {}, $_[0]
}

sub test {
  my $self = shift;
  print "test"
}

1;
\n\n

<!--EDIT|opi|1174554735-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< >> 5 Einträge, 1 Seite



View all threads created 2007-03-21 22:53.