Perl und DBI: "DBI version 111 required--this is only version 1.612"

art.vandelay

New Member
Moin,

ich will mich mal ein wenig an Perl versuchen. Wenn ich use DBI; in meinem Script habe kommt die folgende Meldung:

Code:
DBI version 111 required--this is only version 1.612 at /usr/share/perl/5.10/Exporter/Heavy.pm line 109.

libdbi-perl ist installiert.
Ich habe Perl Version 5.10.1 und Debian Squeeze
aptitude upgrade auch durchgeführt.

Wenn ich google finde ich dazu nichts :( Weiss jemand woher das kommt? version 111 kommt mir auch ein wenig Spanisch vor.
 
Seltsame Geschichte.

Was zeigt denn die Shell bei Eingabe von:

Code:
perl -w -e 'use DBI; print "$DBI::VERSION\n"'
Bei mir:
1.612
An use DBI; kann s nicht liegen. ;)
Die Meldung kommt aus irgendeinem Grund von woanders aus deinem Skript.

Sowas kommt eigentlich nur, wenn irgendwo ein use mit Modulname und Versionsnummer vorkommt.
Beispiel mit falscher Nummer:
root@s2 ~ # perl -w -e 'use DBI 111;'
DBI version 111 required--this is only version 1.612 at -e line 1.
BEGIN failed--compilation aborted at -e line 1.


Aber es ist auch schwer zu erkennen, wo dein Skript das Problem verursacht.

Welche Module werden noch in deinem Skript verwendet? Magst du dein Skript zeigen?
 
Last edited by a moderator:
oh gott - ich habe soeben nicht ca. 15 min rumprobiert bis mir dann aufgefallen das ich das SEMIKOLON vergessen hatte nach use DBI -.-"

Aber die Fehlermeldung ist echt komisch.... naja, jetzt klappt's einwandfrei :)
 
Ich weiß ja nicht wie diene Codezeile bis zum nächsten ; aussieht, wäre interessant zu wissen, um zu erklären warum Perl diese Fehlermeldung wirft.

Gegen gemeine Fehler (die Perl oft selbst entdecken kann) hilft die Verwendung von:

Code:
use strict;
use warnings;
 
Gegen gemeine Fehler (die Perl oft selbst entdecken kann) hilft die Verwendung von:

Code:
use strict;
use warnings;
Gefällt mir mit 3 Ausrufezeichen!!! Ein Perlskript sollte das immer enthalten.
 
Gegen gemeine Fehler (die Perl oft selbst entdecken kann) hilft die Verwendung von:

Code:
use strict;
use warnings;

nutze ich in meinem script natürlich auch ;) Troztdem kein Semikolonfehler :-x

In der nächsten Zeile stand:

my ($jahr)=(localtime)[5];

Hat aber mit der Fehler-Ausgabe nicht zu tun, die kommt auch wenn die Zeile auskommentiert ist...

Hier mal mein Script

Code:
#!/usr/bin/perl
use strict;
use warnings;
use DBI;

#aktuelles Jahr auswerten
my ($jahr)=(localtime)[5];
my $jahr += 1900;
print $jahr;

#MySQL-Verbindung aufbauen
my $dbh = DBI->connect( "DBI:mysql:log","log",'123456') or die "Datenbankverbindung konnte nicht aufgebaut werden";
$dbh->disconnect();
 
Ist doch klar gesagt wo der Fehler ist: Zeile 7!
Code:
#!/usr/bin/perl
use strict;
use warnings;
use DBI 

#aktuelles Jahr auswerten
my ($jahr)=(localtime)[5];

Die Zeile 4 interpretiert Perl nämlich wie folgt:
Code:
use DBI  my ($jahr)=(localtime)[5];
$jahr ist 111 = 2011-1900!
Denn
~ > perl -e"print +(localtime)[5]"
111


Also sieht Perl
Code:
use DBI 
111;

Perl ist oft wurscht auf wieviele Zeilen du deinen Code verteilst, er muss nur druch ; abgeschlossen sein.
Du dürftest auch jedes Wort ein eine separate Zeile schreiben und gar viele Leerzeichen und Newlines drin haben.:
 
Last edited by a moderator:
Übrigens kannst du auf der Kommandozeile auch sehen, was Perl an Code "sieht".

~ > perl -MO=Deparse <<
#!/usr/bin/perl

use DBI


my ($t) = (localtime)[5];
__END__

DBI version 111 required--this is only version 1.616 at /opt/perl-5.12/perl/lib/Exporter/Heavy.pm line 120.
BEGIN failed--compilation aborted at test.pl line 6.
use DBI (my($t) = (localtime)[5]);
 
Back
Top