Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11908[/thread]

Subroutine new() redefined



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
pktm
 2008-05-23 21:00
#110197 #110197
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich hab hier ein problem, bekomme aber nicht raus, woran es genau liegt.
Ich habe 2 Module:
TreebankViewer.pm und TreebankViewer::DataSource.pm.
Ersteres beinhaltet die Funktionalität für die GUI, letzteres alle Operationen auf die Daten (laden, anzeigen, filtern usw.).

Beide Module haben eine new()-Methode.
Jetzt kommt beim Programmstart
Quote
Subroutine new redefined at /home/pktm/workspace/statmt/TreebankViewer.pm line 50.


Zeile 50 ist die Zeile, in der new() definiert ist.

Also... was mache ich falsch? Gehört DataSource in einen eignenen Namensraum?
Welchen Code braucht ihr noch? (sind insg. ~900 Zeilen...)

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
GwenDragon
 2008-05-23 21:03
#110198 #110198
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
pktm
 2008-05-23 21:08
#110199 #110199
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
So, jetzt geht es.

-w aus der Befehlszeile von Perl rausgenommen (im Editor), Syntaxfehler beseitigt und schon klappt alles :)
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2008-05-24 11:29
#110209 #110209
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Interessanterweise kann ich auch gar keinen Fehler in meinem Modul feststellen.

Der Code ist allerdings viel zu lang zum einstellen. Kann man hier eigentlich Textdateien hochladen?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
GwenDragon
 2008-05-24 10:17
#110210 #110210
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Du solltest nur use warnings verwenden. Wenn -w im Shebang steht, meckert Perl aber auch jedes Modul an, welches geladen wird.
Nicht immer sinnvoll, das -w, da es auch Module gibt, die zwar laufen aber trotzdem Warnungen erzeugen.
pq
 2008-05-24 12:01
#110211 #110211
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
subroutine redefined heisst, dass du im selben package zweimal die gleiche subroutine
erstellst. du hast die fehlermeldung und die zeile. welches package hat TreebankViewer.pm?
welches package hat DataSource.pm?
du musst nicht gleich das ganze modul posten, es reicht ja wohl, wenn du alles ausser den
new-methoden rauswirfst, oder uns einfach die relevanten infos mitteilst.
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
Struppi
 2008-05-24 18:31
#110232 #110232
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
-w rausnehmen halte ich für Quatsch, ich hatte schon seit Jahren keine Warnung mehr in externen Modulen gehabt. Ist TreebankViewer ein Modul von dir? Dann liegt der Fehler dort.
pktm
 2008-05-24 19:29
#110233 #110233
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
pq+2008-05-24 10:01:28--
subroutine redefined heisst, dass du im selben package zweimal die gleiche subroutine
erstellst. du hast die fehlermeldung und die zeile. welches package hat TreebankViewer.pm?
welches package hat DataSource.pm?
du musst nicht gleich das ganze modul posten, es reicht ja wohl, wenn du alles ausser den
new-methoden rauswirfst, oder uns einfach die relevanten infos mitteilst.


Also, TreebankViewer.pm hat den Namensraum TreebankViewer, und DataSource.pm TreebankViewer::DataSource. Der Fehler verschwindet - wie ich mittlerweile festgestellt habe - wenn ich in DataSource.pm die Zeile use base qw/TreebankViewer/; auskommentiere.

Hier mal die new-Methode aus TreebankViewer.pm:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
=head2 new( $class? )

Parse configuration, connect to data source, setup gui.

=cut

sub new {
my $class = shift;
my $self = {};

bless ($self, $class);

$self->{cfg} = Config::Auto::parse('baueBaumBottomUp.config');
$self->dbx( TreebankViewer::DataSource->new($self->{cfg}->{meinXml_vorselektiert}) );
$self->{gui} = $self->_tkInit();

return $self;
} # /new


Und hier die Methode new() aus DataSource.pm:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
=head2 new( $class, $dsn )

$dsn = die XML-Datei, die geladen werden soll.

=cut

sub new {
my $class = shift;
my $dsn = shift or croak("missing dsn");

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

return $self;
} # /new


Quote
oder uns einfach die relevanten infos mitteilst


Der ist gut ;-)

Ich glaube, ich habe einfach mal Kapselung mit Verwerbung durcheinander geworfen.
DataSource.pm ist ein Bestandteil von TreebankViewer.pm, den ich aber zwecks besserer Übversicht ausgelagert habe.
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2008-05-24 21:58
#110245 #110245
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
pktm+2008-05-24 17:29:48--
Also, TreebankViewer.pm hat den Namensraum TreebankViewer, und DataSource.pm TreebankViewer::DataSource. Der Fehler verschwindet - wie ich mittlerweile festgestellt habe - wenn ich in DataSource.pm die Zeile use base qw/TreebankViewer/; auskommentiere.

TreebankViewer.pm:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
package TreebankViewer;                                                                              
use strict;
use warnings;

sub new {
    return 1;
}

1;

TreebankViewer/DataSource.pm:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
package TreebankViewer::DataSource;
use strict;
use warnings;
use base qw/ TreebankViewer /;

sub new {                                                                                            
    return 1;
}

1;

funktioniert hier ohne warnungen.

Quote
Quote
oder uns einfach die relevanten infos mitteilst


Der ist gut ;-)

naja, eben das, was du gerade geschrieben hast.
hellsehen kann hier keiner.
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
pktm
 2008-05-25 11:13
#110264 #110264
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Das ist komisch :-(

Ich hab hier mal alle Codes hochgeladen.
Zuerst TreebankViewer.pm, dann TreebankViewer::DataSoure.pm, dann die Konfigurationsdatei und abschließend noch eine Instanz.

Funktionieren tut es ja, nur wenn ich in meinem Editor das Mdoule TreebankViewer.pm selbst "ausführe", dann kommen diese Fehler.
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2008-05-23 21:00.