2010-11-22 4 views
0

Mögliche Duplizieren:
How do I use a Perl package known only in runtime?Wie ein Modul mit einer if Bedingung verwenden

Ich möchte nur ein Modul laden, wenn er eine Bedingung erfüllt.

Kann jemand bitte lassen Sie mich wissen, wie man es benutzt. Ich kenne die Syntax davon. Aber ich bekomme einen Fehler, da ich das Modul use::strict benutze. Es wird ein Fehler ausgegeben, der besagt, dass das Modul definiert werden sollte. Das Programm läuft gut, wenn ich das Modul 'use :: strict' nicht benutze. Hier

ist die Syntax:

use if CONDITION, MODULE => ARGUMENTS; 

Bitte lassen Sie mich wissen, wie wird diese Arbeit mit dem Modul use::strict.

+0

Siehe auch http://stackoverflow.com/questions/2292946/how-can-i-load-a-perl-module-at-runtime und http://stackoverflow.com/questions/3957498/how-can -i-bedingt-import-a-package-in-perl –

+2

Beachten Sie auch, dass Fehler- und Warnmeldungen für Sie * les * sind. Wenn Sie sie nicht verstehen, posten Sie sie zusammen mit dem Code, der diese Maschinen generiert hat. Sie können sich vorstellen, wie schwierig es ist, zu verstehen, was auf Ihrem Computer passiert, von wo aus wir sitzen. Hilf den Menschen, dir zu helfen. –

+3

Vielleicht meinte er "Acme :: use :: strict :: with :: pride"? – mob

Antwort

1

Wenn ich dein Problem richtig verstehe, können Sie wahrscheinlich eval verwenden, anstatt, etwa so:

if (some test here) 
    eval "use WHATEVERMODULE"; 
+0

Die Compiler-Regeln/-Syntax zu optimieren, lange nachdem das Hauptprogramm fertiggestellt wurde, scheint die Kompilierung bemerkenswert wenig nützlich zu sein. – tchrist

5

Sie nutzen könnten require:

if ($condition) { 
    require Conditional::Module; 
    Conditional::Module->import(qw{ methods to be imported }); 
} 
+1

Er versucht, 'if;' in Verbindung mit 'use strict;' zu verwenden, aber er schreibt 'use :: strict', was vermutlich zu einigen interessanten Nachrichten führt. –

+0

Sinan: Oh, ich verstehe. Ich habe 'if' selbst nie benutzt. –

3

Sieht aus wie Sie die if module from CPAN zu verwenden sind versucht, . Können Sie uns den genauen Code zeigen, den Sie ausführen möchten, und die genaue Fehlermeldung, die Sie erhalten. Ohne diese werden Versuche, Ihnen zu helfen, größtenteils Vermutungen sein.

Update: Eigentlich sehe ich, dass if ein Kernmodul ist (und seit einiger Zeit). Wir benötigen jedoch noch mehr Informationen von Ihnen.

aktualisiert Update: Hier ist ein Beispiel:

#!/usr/bin/perl 

BEGIN { 
    $use_strict = 0; 
} 

use if $use_strict, strict; 

Die Einstellung des $use_strict Flag bestimmt, ob oder nicht Strict-Modus eingeschaltet ist.

+4

historische Trivia: IlyaZ arbeitete daran, 'verwenden ... wenn EXPR ', aber andere erschossen es, so schrieb er if.pm statt. – ysth

3

OK, also versuchen Sie if zu verwenden.

Sie scheinen jedoch falsch verstanden zu haben, was es bedeutet, streng zu verwenden.

Es bedeutet, sollten Sie haben:

use strict; 

(und, natürlich, seine Kumpel use warnings;) am Anfang des Skripts.

Beachten Sie, dass use::strict nicht das tut, was Sie sich vielleicht vorstellen.