Philipp Hasenfratz: on the fly require für Prozeduren

Hallo

ich habe ein ziemlich grosses Projekt. Die Compilierung dauert mir etwas zu lange. Es geht nun darum die Compilierungsphase zu beschleunigen.
Derzeit lade ich ALLE externen Perl-dateien durch require ein.

Folgendes hab ich mir überlegt:

Ein Perlprogramm beinhaltet alle Prozeduren. Wenn eine solche aufgerufen wird, wird automatisch das entsprechende Programm geladen.

z. B.

sub test
{
   if ($sub_text eq 0)   # nicht geladen
   {
      require 'test.pl';
      test(@_);   # Die Datei text.pl enthält die original prozedur
                  # test, welche hier aufgerufen wird.
   }
}

nun, die Datei test.pl enthält wiederum eine Prozedur sub test {}, wird dann die bestehende Prozedur ersetzt?

Gibt es eine bessere Methode, um nicht alle Dateien (auch diejenigen, welche gar nicht gebraucht werden) zu kompilieren?

Gruss

---Philipp

  1. Hallo Philipp

    [...]

    Folgendes hab ich mir überlegt:

    Ein Perlprogramm beinhaltet alle Prozeduren. Wenn eine solche aufgerufen wird, wird automatisch das entsprechende Programm geladen.

    z. B.

    [Subroutine required Datei mit Subroutine]

    nun, die Datei test.pl enthält wiederum eine Prozedur sub test {}, wird dann die bestehende Prozedur ersetzt?

    Gibt es eine bessere Methode, um nicht alle Dateien (auch diejenigen, welche gar nicht gebraucht werden) zu kompilieren?

    Die bessere Methode ist imho sicherlich die Verwendung des Moduls AutoLoader.pm. Mit AutoSplit.pm kannst Du Deine Module für jede Subroutine in eine Datei zerlegen, die dann über den AutoLoader bei Bedarf geladen werden können.
    Näheres dazu (ich hab`s noch nicht verwendet, da die meisten meiner Skripte nicht über die 1000-Zeilengrenze hinaus gegangen sind, weil diverse Projekte in sich schon stark modularisiert sind), findest Du sicherlich mit 'perldoc AutoLoader'.

    Gruß Alex

    1. Die bessere Methode ist imho sicherlich die Verwendung des Moduls AutoLoader.pm. Mit AutoSplit.pm kannst Du Deine Module für jede Subroutine in eine Datei zerlegen, die dann über den AutoLoader bei Bedarf geladen werden können.
      Näheres dazu (ich hab`s noch nicht verwendet, da die meisten meiner Skripte nicht über die 1000-Zeilengrenze hinaus gegangen sind, weil diverse Projekte in sich schon stark modularisiert sind), findest Du sicherlich mit 'perldoc AutoLoader'.

      Hallo Alex

      Ja, kenne ich ( habs aber noch nie verwendet ).
      Funktioniert AutoLoader auch bei normalen include-files, keine Module? - Ich tippe mal auf ja, und werde in der Doku mal nachschauen.
      Hoffentlich gibt's nicht zuviel Arbeit, das Projekt ist wirklich nicht das kleinste.

      Viele Grüsse und Dankeschön

      Philipp