martinbb: Module in Verzeichnis einbinden und ausführen

Hallo Forum!

Ich schreib gerade ein kleines Perl-Programm, dass verschiedene kleine Tests durchführt.

Jeder Test ist ein Modul (zb test1.pm) im Verzeichnis tests und hat eine Hauptfunktion check().

Ich hätte gerne dass das Hauptprogramm mit sowas wie ner foreach-Schleife alle Module in diesem Verzeichnis einbindet, die jeweilige check()-Sub ausführt und das Ergebnis ausgibt.

Mir is klar dass ich ins Hauptprogramm schreiben könnte:

use tests::test1;
$ergebnis1 = test1::check();

use tests::test2;
$ergebnis2 = test2::check();

usw.

Es soll aber leicht möglich sein Tests zu aktivieren und zu deaktivieren. Zb. indem man Module aus dem Verzeichnis tests nach tests_deactivated verschiebt, oder in einer Config-Datei eine Liste mit Tests angibt. Ich will net jedesmal den Quellcode editieren müssen wenn Tests (de)aktiviert werden.

Hat wer eine Idee? Hab schon ein bisschen rumprobiert, aber komm nicht weiter.

Vielen Dank und liebe Grüße aus dem verschneiten Wien,
martin

  1. 你好 martinbb,

    Hat wer eine Idee? Hab schon ein bisschen rumprobiert, aber komm nicht weiter.

    Naja, require() und der ->-Operator sollten dir helfen. Schnelles Beispiel ein Modul test.pm:

    package test;  
      
    use strict;  
      
    sub doit {  
      print "Loaded!\n";  
    }  
      
    1;  
    # eof
    

    Und im Haupt-Programm dann:

    #!/usr/bin/perl -w  
      
    use strict;  
      
    my $mod = $ARGV[0];  
    my $clss = substr($mod,0,length($mod)-3);  
      
    require $mod;  
      
    $clss->doit();  
      
    #eof
    

    Aufrufen kannst du das Script über z. B. ./test.pl test.pm. Das sollte dir weiterhelfen, wenn nicht: frage.

    再见,
     克里斯蒂安

    --
    http://wwwtech.de/
    WWWTech.de | Wayne Revived
    <Tim> Ich bin nicht hier, um zu helfen. Mir hilft ja auch keiner. Sogar mein Brötchen muss ich mir jetzt selber schmieren.