Cruz: use mehrfach aufrufen

Hallo Perlers,

ich habe ein Frage zu dem use Kommando. Z.b:

use MIME::Lite

Ich habe diese Zeile in eine Subroutine gepackt, da ich nicht möchte, dass das Modul bei jedem Aufruf des Scriptes eingebunden werden soll. Es soll nur dann eingebunden werden, wenn auch die entsprechende Routine
aufgerufen wird. Ich möchte damit etwas Kompilierzeit sparen.

Was passiert aber, wenn diese Subroutine mit use drin mehrfach hintereinander aufgerufen wird? Wird dann das MIME::Lite Module mehrfach kompiliert, oder versteht der Perl Interpreter das und macht es nur beim ersten mal?

Gruß und Dank
Cruz

  1. Hi,

    Ich habe diese Zeile in eine Subroutine gepackt, da ich nicht möchte, dass das Modul bei jedem Aufruf des Scriptes eingebunden werden soll. Es soll nur dann eingebunden werden, wenn auch die entsprechende Routine
    aufgerufen wird.

    schade eigentlich - wird's nämlich trotzdem.

    Ich möchte damit etwas Kompilierzeit sparen.

    Eine Kompilierung findet _vor_ der Ausführung statt.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. OK danke!

      schade eigentlich - wird's nämlich trotzdem.

      Eien Vorteil sehe ich trotzdem noch die use Zeile in die Subroutine zu packen. Ich weiss dann nämlich genau, dass das Modul mit dieser Routine verknüpft ist. Falls ich mal die Routine rausschmeisse, muss ich nicht dran denken auch das Modul zu entfernen.

      Gruß,
      Cruz

      1. Hi,

        schade eigentlich - wird's nämlich trotzdem.
        Eien Vorteil sehe ich trotzdem noch die use Zeile in die Subroutine zu packen. Ich weiss dann nämlich genau, dass das Modul mit dieser Routine verknüpft ist. Falls ich mal die Routine rausschmeisse, muss ich nicht dran denken auch das Modul zu entfernen.

        Du hast dann aber keinen Überblick mehr über die Abhängigkeiten dieses speziellen Scripts.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          schade eigentlich - wird's nämlich trotzdem.
          Eien Vorteil sehe ich trotzdem noch die use Zeile in die Subroutine zu packen. Ich weiss dann nämlich genau, dass das Modul mit dieser Routine verknüpft ist. Falls ich mal die Routine rausschmeisse, muss ich nicht dran denken auch das Modul zu entfernen.

          Du hast dann aber keinen Überblick mehr über die Abhängigkeiten dieses speziellen Scripts.

          Genau. Also ich habe den

          use...
          require...

          Kram _immer_ in der Hauptdatei.

          ... fals ich hier mal meinen Senf dazu geben darf *g

          /Rolf

          --
          SELFforum - Das Tor zur Welt!
          Theoretiker: Wie kommt das Kupfer in die Leitung?
          Praktiker: Wie kommt der Strom in die Leitung?
  2. Hallo Perlers,

    hallo Cruz,

    ich habe ein Frage zu dem use Kommando. Z.b:

    use Module ();

    ist äquivalent zu

    BEGIN { require Module }

    d.h. use entspricht require mit dem Unterschied, daß es zur Compilezeit ausgeführt wird.

    require wird zur Ausführungszeit ausgeführt. Wird require mehrfach mit einem identischen Namen aufgerufen, so wird es von Perl nur das erste Mal beachtet.

    Kurz und Knapp, rufe doch Deine Subroutine mit require auf. Die wird dann das erste Mal geladen und compiliert das darin enthaltene use Mime::Lite.

    Grüße Oesi
    Ich weiß, dass ich nichts weiß...

    1. Hallo oesi50,

      use Module ();

      ist äquivalent zu

      BEGIN { require Module }

      Imports some semantics into the current package from the named module, generally by
        aliasing certain subroutine or variable names into your package.  It is exactly
        equivalent to

      BEGIN { require Module; import Module LIST; }

      except that Module must be a bareword.

      d.h. use entspricht require mit dem Unterschied, daß es zur Compilezeit ausgeführt wird.

      Nein.

      Grüße,
       CK

      --
      Es ist uns nicht möglich, in einem Bereich unseres Lebens richtig zu verhalten, wenn wir in allen anderen falsch handeln. Das Leben ist ein unteilbares Ganzes.
      1. use Module ();

        ist äquivalent zu

        BEGIN { require Module }

        Imports some semantics into the current package from the named module, generally by
          aliasing certain subroutine or variable names into your package.  It is exactly
          equivalent to

        BEGIN { require Module; import Module LIST; }

        except that Module must be a bareword.

        Du hast nicht genau gelesen was Oesi schrub. Er führte das Beispiel an:

        If you don't want your namespace altered, explicitly supply an empty list:

        use Module ();

        That is exactly equivalent to

        BEGIN { require Module }

        d.h. use entspricht require mit dem Unterschied, daß es zur Compilezeit ausgeführt wird.

        Nein.

        Mit Klammer schon.

        Struppi.

      2. Hallo Christian,

        d.h. use entspricht require mit dem Unterschied, daß es zur Compilezeit ausgeführt wird.

        Nein.

        Stimmt. Aber ich glaube, damit kann Cruz leben.

        Grüße Oesi

  3. hallo,

    falls du apache verwendest könntest du mod_perl verwenden weil:

    [zitat]
    mod_perl gives you a persistent Perl interpreter embedded in your web server. This lets you avoid the overhead of starting an external interpreter and avoids the penalty of Perl start-up time, giving you super-fast dynamic content.
    [/zitat]

    http://perl.apache.org/
    gruss

    --
    no strict;
    no warnings;
    Selbstcode: (_*_) ^_^ ( . ) ( . ) :-(bla)