toreut: use image::magick nur im bin Verz

Hallo,

ich entdecke momentan die wunderbare Welt von Perl und stehe schon vor einer Klippe (verdammt). Es geht um Image::Magick. Vorweg ich habe Windoof und ActivePerl sowie den IIS. Läuft auch "alles prima". Ich kann ein Bild via Image-Magick erstellen, jedoch nur wenn das aktuelle Verzeichnis (Shell) das bin-Verzeichnis von Perl ist. Dort sind die DLL's reinkopiert. Image-Magick (Perl-Magick) ist installiert worden (ppm insatll Image-Magick.ppd). Rufe ich folgendes Script auf und das aktuelle Verzeichnis ist z.B. C:, dann wird nur "Content-type: image/gif" ausgegeben.

-------------------------------------------------------
#!/usr/local/bin/perl

use Image::Magick;

print "Content-type: image/gif\r\n\r\n";

$image=Image::Magick->new;
$image->Set(size=>'30x180');
$image->Read("gradient:#ff0000-#0000ff");
$image->Raise('3x3');
$image->Rotate(-90);
$image->Write('gif:-');
-------------------------------------------------------

Ist das aktuelle Verzeichnis aber c:\perl\bin, dann läuft es.
"use strict" habe ich testweise angegeben und es werden dann (c:) auch Meldungen ausgegeben (Kann Modul nicht finden). Den Shebong kann ich ja nicht ändern oder? Laut Doku sollte man das nicht, da z.B. der Apache ihn benötigt (hab ich aber nicht, noch nicht).
Ich habe @INC gecheckt und dort stehen die Pfade drin. Jetzt ließe sich die ganze Sache natürlich umgehen, indem ich eine Batch-Datei anlege, die vorher das Verzeichnis wechselt, jedoch sind dann Angaben in ASP-Seiten wie <img src="xy.pl"> nicht möglich. Auch habe ich festgestellt, dass nicht alle Versionen gut miteinander laufen.
Meine Installation ist :

Image-Magick/Perl-Magic 5.4.0 (http://www.dylanbeattie.net/magick/downloads.html)
ActivePerl 5.6.1 build 623 http://www.activeperl.com/

Kurz:
Warum läuft das Script nur wenn ich ins bin Verzeichnis wechsel?
Hat jemand das Problem unter Windows schon gehabt und weiß jemand eine Lösung dafür?
Kennt jemand eine Support-Seite für Image-Magick bzw. etwas Vergleichbares?
Könnte ich am Shebong was ändern?
Würde es evtl. was bringen, wenn ich die Image-Magick DLL's auf meinem Rechner kompiliere anstatt die Binarys zu verwenden?

danke
toreut

  1. Hallo,

    Du mußt das Verzeichnis, in dem die DLL's liegen, in die Environmentvariable 'PATH' aufnehmen, da Windows nur das aktuelle Verzeichnis und sämtliche Verzeichnisse im PATH abklappert, um eine DLL zu lokalisieren.
    Wie das geht, hängt allerdings von der Windowsversion ab.
    bei Windows9x/ME erfolgt das in der Datei autoexec.bat, unter NT und Nachfolgern über die Systemsteuerung.

    Alternativ kannst Du die DLL's auch in ein bereits eingetragenes Verzeichnis kopieren, was ich allerdings nur machen würde, wenn Du unter 9x/ME Schwierigkeiten mit der Größe von PATH hast.

    Grüße
      Klaus

    1. Hallo,

      Du mußt das Verzeichnis, in dem die DLL's liegen, in die Environmentvariable 'PATH' aufnehmen, da Windows nur das aktuelle

      Auch das habe ich schon gemacht. Unter NT und W2K über Systemsteuerung-System-Erweitert-Umgebungsvariablen für Benutzer und Systemvariablen. Es hilft nichts. Habe auch schon "use lib <pfadangabe>" verwendet. Die Pfade sind da aber das Modul läuft nicht. Dachte ich muß vielleicht noch eine besondere Umgebungsvariable für Perl setzen. Gibt es denn keine Konfigurationsdatei wo man sowas per Hand vornehmen kann. Laut Doku braucht Windoof das nicht, da die Dateiendungen mit Perl verknüpft sind. Kann ich vielleicht in der Registry was unter HKEY_LOCAL_MACHINE/Software/Perl einstellen. Dort steht nur eine Zeichenfolge "BinDir" mit dem Wert "C:\Perl\bin\Perl.exe".
      Wenn ich im Script "use strict" einsetzte, dann sagt mir Perl "Global symbol $image requires explicit package name at c:\test.pl at line 8". Das wäre also "$image=Image::Magick->new;". Was geschieht hier bloß? Warum kann Perl das Modul nur dann laden wenn ich im C:\Perl\bin Verzeichnis bin. Das Modul liegt unter C:\Perl\site\lib\Image\Magick.pm. Ein völlig anderes Verzeichnis. Die Perl-Magick DLL's liegen in C:\Perl\site\lib\auto\Image\Magick\*.*. Nur die Image-Magick DLL's hab ich ins bin-Verzeichnis kopiert (vorher). Wie setzt sich denn der Pfad zusammen? Es wird doch in @INC gesucht oder gibt es da noch eine andere Variable? Ach ich habe die Schnauze voll... Wen muß ich denn anrufen? Gates oder Wall? *g*

      danke
      toreut