bestimmen aller Unterklassen

07/07/2008 - 22:08 von Heiko Eißfeldt | Report spam
Hallo,

sagt mal, wie kann ich eine
Liste aller geladenen Subklassen
zu einer vorgegebenen Basisklasse x bekommen?

Sowas wie
grep { $_->isa(x) } @alleKlassen

Ich habe dazu nichts in den FAQs gefunden.

Hintergrund: Ich möchte an ein Fremd-Package ankoppeln,
das ein Spektrum von Subklassen ausgibt, die ich
registrieren möchte. Die genaue Menge
an Subklassen ist nicht vorn herein bekannt.

Besten Dank, Heiko
 

Lesen sie die antworten

#1 Frank Seitz
08/07/2008 - 07:00 | Warnen spam
Heiko Eißfeldt wrote:

sagt mal, wie kann ich eine
Liste aller geladenen Subklassen
zu einer vorgegebenen Basisklasse x bekommen?

Sowas wie
grep { $_->isa(x) } @alleKlassen

Ich habe dazu nichts in den FAQs gefunden.



Wundert mich nicht, denn das ist keine FAQ :)

Die folgende Methode, in UNIVERSAL installiert und
mit main->packages aufgerufen, liefert dir @alleKlassen,
womit du, wie du oben beschreibst, dein Problem lösen kannst.

sub packages {
my $class = shift;

$class =~ s/^main:://;

my @arr;
if ($class ne '<none>') {
push @arr,$class;
}

no strict 'refs';
for (keys %{"$class\::"}) {
if (/::$/ && $_ ne 'main::') {
my $sub = $_;
$sub =~ s/::$//;
my $class = "$class\::$sub";
push @arr,$class->packages;
}
}

return wantarray? @arr: \@arr;
}

Grüße
Frank
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Ähnliche fragen