utilisé une librairie Win32 dans un script pouvant rouler unix [Perl] - Perl - Programmation
Marsh Posté le 17-03-2004 à 11:48:43
ReplyMarsh Posté le 17-03-2004 à 12:25:30
Les "use" sont executé à la compilation, quelque soit l'endroit ou ils sont.
si tu le fait dans une boucle conditionnelle alors utilise un "require" à la place du "use". Par contre si tu veux importer des fonction (ou si il en importe par defaut et que tu les utilise), il faudra que tu fasse un "import" explicite.
L'autre solution c'est de faire un 'eval "use ...";'
Marsh Posté le 17-03-2004 à 13:28:13
et dans mon cas qu'est-ce qui serait le plus approprié?
le script peut rouler sous divers OS, mais lorsque c'est windows, j'ai besoin de la Win32::NetAdmin et de certaines de ses fonctions
Marsh Posté le 17-03-2004 à 13:46:33
moi je ferais:
Code :
|
Marsh Posté le 17-03-2004 à 13:53:25
Si je fais
Code :
|
j'ai aucune erreur, sauf à l'exécution sous unix
Si je fais
Code :
|
j'ai une erreur de syntaxe en tentant d'utiliser USER_PRIV_ADMIN, que je n'avais pas avec le use
Code :
|
Marsh Posté le 17-03-2004 à 14:07:00
pospos a écrit : Tu ne l'a que sous Unix cette erreur non? |
erreur sous win32
Code :
|
si j'utilise le "use", ca print mon 1.1 must not have...
si j'utilise le require et le import, sous windows, j'ai cette erreur:
Z:\httpd_cops>perl ../test.pl
Bareword "USER_PRIV_ADMIN" not allowed while "strict subs" in use at ../test.pl line 17.
Execution of ../test.pl aborted due to compilation errors.
Marsh Posté le 17-03-2004 à 14:12:01
ouai, c'est pasque Perl verifi les barewords à la compilation, et ta constant USER_PRIV_ADMIN n'existe pas encore à ce moment la...
donc la solution c'est soit de mettre tout le bloc du "if $^O..." dans un BEGIN (pas certian que ca marche cependant), soit de declarer une sub USER_PRIV_ADMIN qui sera ensuite ecrasée par la vraie constante au moment de l'importe. Du reste c'est le seul moyen de faire si tu veux que ca tourne aussi sous Unix car meme si tu n'execute pas les portions de code specifiques windows en testant une condition, Perl verifira tout de meme les barewords et si il y a aucune surt qui correspond il va gueuler
Marsh Posté le 17-03-2004 à 14:16:23
je viens d'essayer ca et ca ne fonctionne pas
Code :
|
Marsh Posté le 17-03-2004 à 14:18:08
Fonctionnel
Code :
|
gros merci à toi Pospos, oh grand gourou Perl
Marsh Posté le 16-03-2004 à 20:49:53
J'ai un script, qui devra vérifier des trucs pour les serveurs web sous les OS suivants: AIX, linux (debian), MVS (zos) et Windows.
Je dois entre autre vérifier que le userid tournant le serveur web n'a pas de privilège système.
Sous Win32, je compte utilisé Win32::NetAdmin::UserGetAttributes
cependant, aussitot que je fais le use, même si c'est dans ma boucle "Si l'os est Win32", j'ai une erreur en tentant de le faire tourner sous unix (Can't locate Win32/NetAdmin.pm in @INC)