Christoph Schnauß: Module - kann man sie überall voraussetzen ?

hallo Forum ;-)

mich beschäftigt ein scheinbar abseitiges Problem: glücklicherweise werden es immer mehr Module mit immer besser durchdachten Funktionen, de es für Perl gibt. Das ist alles ganz prima, solange ich perl-scripts im Intranet laufen lasse und sicher bin, daß auf "meinem" Server tatsächlich alle Module vorhanden sind (ich hab build 522 derzeit).
Jetzt hab ich bei einem kleinen script, das über "use cgi" die CGI.pm einbindet, online verblüffenderweise ne Fehlermeldung gekriegt, obwohl haargenau dasselbe script auf meinem Rechner tadellos läuft.
Was gibts denn bei der Einbindung von Modulen zu beachten ?

Christoph S.

  1. Hi,

    zum Subject: Ja, erwarten kannst Du die Standardmodule, zu denen CGI.pm zählt, durchaus. Es ist aber dennoch möglich, daß sie fehlen - in dem Fall solltest Du einen Providerwechsel ernsthaft in Betracht ziehen.

    Jetzt hab ich bei einem kleinen script, das über "use cgi" die CGI.pm einbindet, online verblüffenderweise ne Fehlermeldung gekriegt, obwohl haargenau dasselbe script auf meinem Rechner tadellos läuft.

    Mich verblüfft vielmehr, daß es bei Dir klappt! Ich als Perl-Interpreter würde kein Modul namens "cgi" finden, da ich nur "CGI" kenne. Perl ist da strikt case-sensitive!

    Ansonsten teste doch mal minimal:

    #!/usr/bin/perl -w
    use CGI::Carp 'fatalsToBrowser';
    use CGI;
    print header, start_html('Test'), 'Geht!', end_html;

    So gibt's auch eine etwas genauere Fehlermeldung, falls es nicht am Modul selber liegt. Wenn doch (wenn es also fehlt), gibt's wie gehabt den ISE 500. Oder aber wenn Du nicht im ASCII-Modus hochgeladen hast, die Rechte vergessen hast, ein Konfigurationsfehler vorliegt... ;-)

    HTH

    Cheatah

    1. Mich verblüfft vielmehr, daß es bei Dir klappt! Ich als Perl-Interpreter würde kein Modul namens "cgi" finden, da ich nur "CGI" kenne. Perl ist da strikt case-sensitive!

      richtig. Ich habs im Script natürlich korrekt stehen, aber in meinem Posting die GROSSBUCHSTABENTASTE zu drücken versäumt, sorry.

      Christoph S.

  2. Hallo Christoph!

    Die CGI.pm ist IMHO als Standard mit dabei. Die Frage ist hier: Welche Fehlermeldung kam?

    allgemein:
    Leider hat nicht jeder Provider alle Module installiert. Das Beste ist, Du fragst bei Deinem Provider mal an, welchen Build un welche Packages er installiert hat.
    Ansonsten mal die Doku waelzen, da steht immer was drin ;-)

    Gruß
    Thomas

    1. Hallo!

      Noch ein kleiner Nachtrag von mir:
      Wenn der Provider ein Modul nicht installiert hat, und es aus irgendwelchen Gründen auch nicht installieren will (z.T. gibt's da wirklich Kompatibilitätsprobleme, also bitte nicht gleich über den Provider fluchen), kann man sie auch - Telnet-Zugang vorausgesetzt - lokal installieren. Etwas Unix-Kenntnisse sind allerdings schwer anzuraten...
      Zum Installieren einfach das Modul von CPAN (www.cpan.org + Mirrors) holen, mit (üblicherweise) "perl Makefile.PL" und "make" kompileren, und dann *nicht* "make install", sondern die benötigten Files (üblicherweise *.pm, sowie die Verzeichnisse mit Modulnamen und "auto") in ein eigenes Verzeichnis kopieren.
      Um sie zu verwenden, kann man entweder (iirc)
      use lib "/pfad/zu/meinen/modulen";
      verwenden, oder sie als Parameter angeben:
      #!/usr/bin/perl -I /pfad/zu/meinen/modulen

      Mache ich schon seit einiger Zeit so, vor allem, weil ich 1. nicht auf den Provider warten muß und 2. auch nicht immer 100%ig weiß, ob das Modul auch für meinen speziellen Fall taugt, und ich so "probeweise" installieren kann (und 3. auch noch eigene Module habe)...

      Ciao,
      Mirko