9
votes

Comment utiliser conditionnellement un module Perl uniquement si je suis sur Windows?

Le code PERL suivant .. xxx

.. fonctionne sous Windows, mais ne fonctionne pas sous toutes les autres plates-formes ("ne peut pas localiser win32.pm dans @inc"). Comment instruire Perl d'importer Win32 uniquement lors de l'exécution sous Windows et ignore l'instruction d'importation sous toute autre plate-forme?


1 commentaires

Est-ce que cela répond à votre question? Comment puis-je utiliser un module dans Perl?


4 Réponses :


3
votes

en général, Utilisez le module ou Liste des module sont évalués au moment de la compilation, peu importe où ils apparaissent dans le code. L'équivalent d'exécution est xxx


0 commentaires

1
votes

nécessite un module;

mais Utiliser Appels Importation , nécessite ne le fait pas. Donc, si le module exporte vers l'espace de noms par défaut, vous devez également appeler

Import Module QW (Stuff_To_IMport) ;

Vous pouvez également eval "Utilisez le module" - qui fonctionne bien si Perl peut trouver le chemin approprié à l'exécution.


1 commentaires

N'utilisez pas d'appels de méthode indirecte, ils ne sont pas les meilleures pratiques par un long coup. Faire module-> importation (qw (truc)); à la place.



21
votes

Ce code fonctionnera dans toutes les situations et effectue également la charge au moment de la compilée, car d'autres modules que vous construisent peut dépendre de celui-ci:

use if $^O eq "MSWin32", Module;


3 commentaires

Bareword "module" non autorisé alors que "Strict Strict" en utilisation ... - Il avait l'air si bon de loin ....


@JWW Vous êtes censé remplacer "module" par le nom du module réel que vous souhaitez charger. Et cet espace de noms doit être déclaré dans le fichier avec une instruction package .


Oh l'a eu, merci. Pourquoi n'avez-vous pas utilisé win32 ? (Je ne suis pas un vétéran Perl chevronné, alors j'ai souvent besoin de chercher Perl de base).



11
votes

En tant que raccourci pour la séquence:

use if $^O eq "MSWin32", "Win32";  # or ..."Win32", your-args;


0 commentaires