Letztens hatte ich ein paar Probleme mit dem CPAN unter der Strawberry-Perl-Installation unter Windows auf einem Laptop vom Kunden. Mit Windows zu arbeiten ist ja meistens schon Strafe genug, es scheint aber, dass diese Probleme nicht nur mit Strawberry-Perl auftreten:
Bei dem Versuch der Installation eines Modules kam die folgende Fehlermeldung:
Can't call method "value" on an undefined value at c:/strawberry/perl/lib/IO/Uncompress/RawInflate.pm line 64
Die CPAN-Shell konnte noch nicht mal die Modulliste auspacken geschweige denn irgendwas installieren. Die Lösung war dann nach langem Probieren: Die Version 2.008 von IO::Uncompress::RawInflate (in IO-Compress-Zlib) und alle Abhängigkeiten bzw. die weiterem IO::(Un)Compress::*-Module habe ich manuell auf die Version 2.011 aktualisiert und dann ging wieder alles.
Ergänzung: Unter Linux oder einem Unix-ähnlichen System mit lokalem gzip/bzip2 könnte es auch klappen, die Module zu löschen, so dass Perl ein lokales CLI gunzip/bunzip2 nimmt.
Zuvor hatte ich noch ein anderes Problem:
cpan> install Foo::Bar
DBD::SQLite::db prepare failed: no such table: dists(1) at dbdimp.c line 271 at C:\strawberry\perl\site\lib/CPAN/SQLite/
DBI/Search.pm line 86, <IN> line 2.
Catching error: 'DBD::SQLite::db prepare failed: no such table: dists(1) at dbdimp.c line 271 at C:\\strawberry\\perl\\s
ite\\lib/CPAN/SQLite/DBI/Search.pm line 86, <IN> line 2.
' at C:/strawberry/perl/lib/CPAN.pm line 281
CPAN::shell() called at C:\strawberry\perl\bin/cpan.bat line 211
Da war die SQLite-Datenbank, in der das CPAN.pm optional die Metadaten ablegt (use_sqlite-Konfiguration), kaputt. Möglicherweise wird die zerschossen, wenn die CPAN-Shell an der falschen Stelle abgewürgt wird (bei mir: hatte vergessen mich ins VPN des Kunden einzuwählen, und ohne geht dessen Proxy natürlich nicht).
Die Lösung ist dann meist, die Datenbank oder gar alles im CPAN-Ordner zu löschen. Bei Strawberryperl liegt das unter C:\strawberry\cpan\, bei anständigen Betriebssystemen unter ~/.cpan/.
Ja, Windows ist schon so eine Sache für sich: Wenn man Perl unter Cygwin benutzt, liegt die CPAN::Config.pm unter /usr/lib/perl5/5.8, nicht etwa als MyConfig.pm unter ~/.cpan/CPAN ... Das verwirrt mich doch immer wieder ;-).
Also, ich kenne das auch als /path/to/lib/CPAN, habe aber auch schon mal was entsprechendes in ~/.cpan/ gefunden. Welcher Logik das folgt habe ich aber nicht analysiert ;-)
Aber zurück zu Windows: Auch mit Strawberryperl oder Cygwin ist das zusammen mit Perl nicht das Wahre. Ein Unix ist mir da doch deutlich lieber. Und mit OS X geht das ja auch komfortabel ;-)
Ja, es stimmt unter Linux (Debian 5.0) hat es fuer mich funktioniert, einfach das Modul IO::Uncompress::RawInflate zu loeschen