• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Perl Problem bei Popfile Installation

Geigaman

Macoun
Registriert
17.03.06
Beiträge
116
Hallo ihr!

Ich hoffe ich bekomme von euch etwas Hilfe.

Ich wollte POPfile installieren (soll sehr gut sein). POPfile ansich ist aber nur eine Sammlung von Perl Scripts die mit eine SQLite DB zusammenarbeiten.

Prinzipiell habe ich alles nach dieser Anleitung gemacht, bis zu dem Punkt wo ich in der CPAN shell
Code:
install DBD::SQLite2
machen musste. Das ging schlug ein Test immer fehl.
Kurz Google befragt --> keine echte Lösung also
Code:
force install DBD::SQLite2
:-D

Danach hat es dann auch installiert, aber wenn ich nur
Code:
perl popfile.pl
ausführe kommt folgendes:
Code:
ibook:/Library/POPfile username$ perl popfile.pl 

POPFile Engine loading

    Loading... 
         {core: config history logger mq} 
         {classifier: bayes wordmangle} 
         {interface: html xmlrpc} 
         {proxy: nntp pop3 smtp} 
         {services: imap} 

POPFile Engine v0.22.5 starting

    Initializing... 
         {core: config history logger mq} 
         {classifier: bayes wordmangle} 
         {interface: html xmlrpc} 
         {proxy: nntp pop3 smtp} 
         {services: imap} 

    Starting...     
         {core: config history logger mq} 
DBI connect('dbname=./popfile.db','',...) failed: unable to open database: ./popfile.db(1) at dbdimp.c line 57 at /Classifier/Bayes.pm line 735
Use of uninitialized value in concatenation (.) or string at /Classifier/Bayes.pm line 739.
Use of uninitialized value in string gt at /Classifier/Bayes.pm line 745.
Can't call method "do" on unblessed reference at /Classifier/Bayes.pm line 1028, <SCHEMA> line 86.
         {classifier:ibook:/Library/POPfile username$
Ich hab keine Ahnung, ob er wegen der Datenbank, die nicht geöffnet werden kann aussteigt. Ich weiß, das wäre auch nicht so gut, aber es sieht garnicht direkt nach dem Datenbankfehler aus, oder doch?
Wie kann ich dem Script oder Perl sagen welche Datenbank er benutzen soll?

Danke schonmal im Voraus
Wenn das Programm dann mal funktionieren sollte, werde ich ein Review schreiben, das Ding soll echt gut sein.
 

Cyrics

Neuer Berner Rosenapfel
Registriert
01.04.05
Beiträge
1.973
ich hab mich persönlich noch nicht wirklich mit Datenbanken in Verbindung mit Perl auseinander gesetzt. Finde das Thema aber hochspannend und würde mich freuen, wenn du ein Review dazu schreiben könntest.

Also ich kann die nur aus der Sicht meiner begrenzten Perl-Kenntnisse helfen.
Also das Ding scheint ja normal zu starten, zumindest versucht er einiges zu initialisieren und dann ein connect zu einer Datenbank aufzubauen.

Code:
Starting...     
         {core: config history logger mq} 
DBI connect('dbname=./popfile.db','',...) failed: unable to open database: ./popfile.db(1) at dbdimp.c line 57 at /Classifier/Bayes.pm line 735
Also hier wird anscheinend durch "eval" versucht eine Verbindung aufzubauen. Und zwar zu der Datenbank, die in dem aktuellen Verzeichnis liegt und popfile.db heisst.
Genaueres sollte dazu in dbdimp.c in der Zeile 57 stehen.
Die ausführliche Fehlermeldung hast du sozusagen selbst schon vor dir liegen. Wenn diese popfile.db nicht existiert, wird es in den folgenden Schritten gleich unangenehm, weil nun mit etwas gearbeitet wird, was nicht existiert.
Code:
Use of uninitialized value in concatenation (.) or string at /Classifier/Bayes.pm line 739.
Use of uninitialized value in string gt at /Classifier/Bayes.pm line 745.
Hier kommen nämlich erst die wirklichen Probleme. Der nicht definierte Filehandler, der nun auf eine Datei lesen möchte, die nicht existiert, wirft verschiedene Fehler in dem Perl Modul Bayes.

Code:
Can't call method "do" on unblessed reference at /Classifier/Bayes.pm line 1028, <SCHEMA> line 86.
         {classifier:ibook:/Library/POPfile username$
Und dann kommt der endgültige Abbruch, da kein heilvolles Eintreten in die do-Schleife möglich war. Anscheinend ist der Filehandler, welcher auf die "Datenbank" zugreift <SCHEMA>. Naja, der ist wie gesagt nicht definiert und fördert die Fehler an den Tag.

Du könntest dir ja mal den Quelltext anschauen und gucken inwiefern du den Filehandler klar machen kannst auf welche Datenbank er zugreifen soll, oder du übergibst dem einfach mal als Parameter hinter den Aufruf den Pfad zur Datenbank.

es gibt leider zig Möglichkeiten auf eine Datenbank zuzugreifen mit Perl, daher kann ich dir nicht genau sagen nach was du auschau halten solltest...
für mich klingt es nach der Möglichkeit einen normalen Bareword Filehandler zu öffnen:
Code:
open SCHEMA,'<',"$SQLPLUS .... ";

PS: tut mir leid für die späte Wortmeldung... hab den Thread leider erst jetzt entdeckt.