Thread Von CGI.pm Methods erben (25 answers)
Opened by rosti at 2011-04-12 10:35

rosti
 2011-04-12 17:34
#147643 #147643
User since
2011-03-19
3197 Artikel
BenutzerIn
[Homepage]
user image
Jetzt wirds richtig interessant, danke Dir. Naja, ich war ja auch nicht faul und die lieben Mitleser wollen ja auch was davon haben, also, bischen Code zum Thema Inherit Methods ;)

Code (perl): (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
package Foo; # BaseClass

sub new{
        my $class = shift;
        return bless {}, $class;
}

sub fx{
        my $self = shift;
        $self->{FX} = "xxxxxxxxxxxxx xxxxxxxxxxxxxx xxx";
}

###########################################################################

package Bar;

use base 'Foo'; # Inherit from Foo

sub new{
        my $class = shift;
        my $foo = $class->SUPER::new;
        return bless {FOO => $foo}, $class;
}

######################## OVERLOAD Foo::Methods ############################

sub fx{
        my $self = shift;
        $self->{FOO}->SUPER::fx;
}
###########################################################################

package main;

use Data::Dump qw(dump);

my $o = Bar->new;
$o->fx;
print dump($o); # alles am rechten Platz


Mit meinem Perl v5.6.1 funktioniert das einwandfrei und widerspricht auch nicht OOP: die geerbten Methods werden überschrieben und mit der Superklasse aufgerufen. Beim Aufruf ist

$self->{FOO}

in der Method der Superklasse dann $self ohne FOO und die Attribute landen an der richtigen Stelle (mundartlich, sorry).

Aber jetzt die Frage: Funktioniert dass denn in höheren Perl-Versionen nicht mehr?

--rosti


Edit: Mit UNIVERSAL::isa kann die Vererbung auch geprüft werden:

Code (perl): (dl )
print $o->UNIVERSAL::isa('Bar'); # Bar => 1, Foo => 1


Von UNIVERSAL erben alle Perl-Module.
Last edited: 2011-04-12 17:47:54 +0200 (CEST)

View full thread Von CGI.pm Methods erben