Wie kann ich ein Perl-Modul nur bedingt verwenden, wenn ich unter Windows bin?

8

Der folgende Perl-Code ..

%Vor%

.. funktioniert unter Windows, funktioniert aber nicht unter allen anderen Plattformen ("Win32.pm kann nicht in @INC gefunden werden"). Wie weise ich Perl an, Win32 nur unter Windows zu importieren und die Importanweisung unter allen anderen Plattformen zu ignorieren?

    
knorv 17.09.2009, 22:43
quelle

4 Antworten

20

Dieser Code funktioniert in allen Situationen und führt das Laden zur Kompilierungszeit durch, da andere Module, die Sie erstellen, davon abhängen können:

%Vor%

Dies liegt daran, dass use Module (qw(foo bar)) äquivalent zu BEGIN { require Module; Module->import( qw(foo bar) ); } ist, wie in perldoc -f beschrieben.

(EDIT, ein paar Jahre später ...)

Das ist aber noch besser:

%Vor%

Lesen Sie mehr über das if pragma hier .

    
Ether 17.09.2009, 23:37
quelle
11

Als Abkürzung für die Sequenz:

%Vor%

Sie können das if-Pragma verwenden:

%Vor%     
ysth 18.09.2009 01:25
quelle
3

Im Allgemeinen werden use Module oder use Module LIST zur Kompilierungszeit ausgewertet, unabhängig davon, wo sie im Code erscheinen. Das Laufzeitäquivalent ist

%Vor%     
mob 17.09.2009 22:48
quelle
1

require Module;

Aber use ruft auch import auf, require nicht. Wenn das Modul also in den Standardnamespace exportiert, sollten Sie auch

aufrufen

import Module qw(stuff_to_import) ;

Sie können auch eval "use Module" - was gut funktioniert, wenn Perl zur Laufzeit den richtigen Pfad finden kann.

    
user175249 17.09.2009 23:01
quelle

Tags und Links