Schrift
[thread]12559[/thread]

Probleme beim Erben von Tree::Simple: uninitialisized value

Leser: 1


<< >> 7 Einträge, 1 Seite
pktm
 2008-09-30 03:59
#115016 #115016
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich würde gerne Tree::Simple erweitern, und habe dazu folgenden Ansatz gewählt:
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
package Tree::Simple::Extended;

use base qw/Tree::Simple/;

use strict;
use warnings;
use Class::Param;

# return everything as utf-8
our $PARAM_UTF8 = 0;

=head1 Tree::Simple::Extended

Adaption von Tree::Simple: Hinzufügen benutzerdefinierter Felder.

=cut

sub new {
my $class = shift;

my $self = bless({}, $class);

$self->SUPER::new(@_);

return $self;
} # /new

1;


Wenn ich damit aber einen Baum erzeuge gibt es Fehler:
Code: (dl )
1
2
3
4
5
6
7
8
my $tree = Tree::Simple::Extended->new('.', Tree::Simple->ROOT);
$tree->addChildren(
Tree::Simple::Extended->new('|')->addChildren(
Tree::Simple::Extended->new("1"),
Tree::Simple::Extended->new("2"),
),
Tree::Simple::Extended->new("3"),
);


Fehler:
Quote
Use of uninitialized value in addition (+) at C:/Perl/site/lib/Tree/Simple.pm line 87.
Use of uninitialized value in addition (+) at C:/Perl/site/lib/Tree/Simple.pm line 100.
...


Der Fehler scheint daher zu kommen, dass ein Wert in der Instanz nicht initialisiert wird. Aber, wenn $self->SUPER::new(@_); seine arbeit machen würde, dann müsste das doch eigentlich alles funktionieren?
Ich habe use base qw/Tree::Simple/; drin. D.h. ich habe auch alle Methoden aus Tree::Simple zur Verfügung.

Was kann ich vergessen haben, dass das nicht funktioniert?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2008-09-30 10:42
#115019 #115019
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach mal aus:
Code (perl): (dl )
1
2
3
     my $self = bless({}, $class);
    
    $self->SUPER::new(@_);


das hier:

Code (perl): (dl )
my $self = $class->SUPER::new( @_ );
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pktm
 2008-09-30 16:21
#115027 #115027
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Danke, das funktioniert, aber warum?
Der ctor von Tree::Simple macht nämlich das: my $class = ref($_class) || $_class;. Da müsste doch dann genau das selbe passieren, was passiert, wenn ich Tree::Simple::Extended->new() aufrufe?
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2008-09-30 16:31
#115028 #115028
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vererbung ist mehr als nur Methoden in einen Namensraum zu kopieren. Du hast ein Objekt erzeugt ($self->SUPER::new( @_ ) ) und nichts damit angefangen. Du verlierst also die ganze "Infrastruktur" eines Tree::Simple Objekts...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pktm
 2008-09-30 16:40
#115029 #115029
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ach ja, stimmt. Das SUPER::new() gibt ja auch etwas zurück.
Ich glaube, ich habe zuviel java programmiert...
http://www.intergastro-service.de (mein erstes CMS :) )
Struppi
 2008-09-30 17:47
#115033 #115033
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Ja, wichtig ist zu Wissen das new nichts weiter als eine Funktion ist, kein Schlüsselwort. Du kannst sie auch völlig beliebig bennenen.
GwenDragon
 2008-10-01 11:18
#115052 #115052
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Ja, new heißt die Funktion nur, damit eineR später sieht was die macht, also nur zur besseren Erkennung und Dokumentation und als guter Perlstil.
<< >> 7 Einträge, 1 Seite



View all threads created 2008-09-30 03:59.