Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Utiliser un dossier personnel plutot que c:perllib pour mes modules (.pm)

4 réponses
Avatar
Martin
Bonjour,

J'ai créé un module (.pm) qui contient certaines fonctions que j'utilise
souvent. Dans un .pl, je fais un require sur ce module et j'appelle les
fonctions. Les deux fichiers sont dans le même repertoire. Quand je lance le
fichier .pl par la ligne de commande, ca fonctionne bien. Cependant, quand
je le charge à partir de PerlEz (une dll de ActiveState sous win32 pour
appeller du perl dans du C ou C++), ca ne fonctionne que si je déplace le
fichier .pm dans un repertoire standard pour les .pm, c:\perl\lib par
exemple.

Le problème, c'est que je ne veux pas faire cela. Je veux que mon code Perl
suive le code C++ associé dans notre outil de versionning (CVS) alors le
plus simple serait qu'il soit sous le même repertoire racine. Je doute qu'il
y ait une facon de spécifier l'utilisation du bon repertoire, soit quand je
crée l'interpréteur avec PerlEz, soit avec un fichier de configuration.

Je ne veux pas non plus faire un ' require "c:/monrep/fichier.pm"; ' parce
que tout le monde au bureau n'a pas placé son repertoire CVS au même
endroit.

Merci!

4 réponses

Avatar
Jacques Caron
Salut,

On Fri, 28 Oct 2005 04:09:12 +0200, Martin
wrote:

Je doute qu'il y ait une facon de spécifier l'utilisation du bon
repertoire,
soit quand je crée l'interpréteur avec PerlEz, soit avec un fichier de
configuration.


Je ne connais pas PerlEz ni les spécificités Windowsiennes, mais un bon
PERL5LIB correctement configuré dans l'environnement devrait faire
l'affaire, non?

perldoc perlrun t'en dira plus...

Jacques.
--
Oxado http://www.oxado.com/

Avatar
jl_morel
Dans l'article <9Lf8f.12709$,
a dit...
J'ai créé un module (.pm) qui contient certaines fonctions que j'utilise
souvent. Dans un .pl, je fais un require sur ce module et j'appelle les
fonctions. Les deux fichiers sont dans le même repertoire. Quand je lance le
fichier .pl par la ligne de commande, ca fonctionne bien. Cependant, quand
je le charge à partir de PerlEz (une dll de ActiveState sous win32 pour
appeller du perl dans du C ou C++), ca ne fonctionne que si je déplace le
fichier .pm dans un repertoire standard pour les .pm, c:perllib par
exemple.

Le problème, c'est que je ne veux pas faire cela. Je veux que mon code Perl
suive le code C++ associé dans notre outil de versionning (CVS) alors le
plus simple serait qu'il soit sous le même repertoire racine. Je doute qu'il
y ait une facon de spécifier l'utilisation du bon repertoire, soit quand je
crée l'interpréteur avec PerlEz, soit avec un fichier de configuration.



Vous pouvez ajouter un répertoire à @INC à la création l'interpréteur avec
PerlEzCreate exactement comme vous le feriez avec perl en ajoutant un -I<rep>
sur la ligne de commande.
(Il faut dire que la doc de PerlEz est vraiment minimale; contrairement à
ce que son nom indique, son utilisation n'est pas si "easy" que ça.)

Le petit programme C qui suit affiche @INC.
Chez moi ça donne :
C:/foo/bar
C:/perl58/lib
C:/perl58/site/lib
.
Le répertoire ajouté est donc placé en tête de @INC

------------
#include <stdio.h>
#include <windows.h>
#include <PerlEz.h>

int main(void)
{
char buffer[200];
int err;

PERLEZHANDLE perl = PerlEzCreate(NULL, "-IC:/foo/bar");

if (!perl) {
printf("Erreur creation perl interpreteur");
return 1;
}

err = PerlEzEvalString(perl, "join "n", @INC", buffer, sizeof(buffer));

if (err)
printf("Erreur #%i", err);
else
printf(buffer);

PerlEzDelete(perl);
return 0;
}
------------

HTH

--
J-L.M.
http://www.bribes.org/perl

Avatar
Steph
Un simple perl -V ne suffirait-il pas à afficher @INC ?
Chez moi, si. :-)



Dans l'article <9Lf8f.12709$,
a dit...
J'ai créé un module (.pm) qui contient certaines fonctions que j'uti lise
souvent. Dans un .pl, je fais un require sur ce module et j'appelle les
fonctions. Les deux fichiers sont dans le même repertoire. Quand je la nce le
fichier .pl par la ligne de commande, ca fonctionne bien. Cependant, qua nd
je le charge à partir de PerlEz (une dll de ActiveState sous win32 pour
appeller du perl dans du C ou C++), ca ne fonctionne que si je déplace le
fichier .pm dans un repertoire standard pour les .pm, c:perllib par
exemple.

Le problème, c'est que je ne veux pas faire cela. Je veux que mon code Perl
suive le code C++ associé dans notre outil de versionning (CVS) alors le
plus simple serait qu'il soit sous le même repertoire racine. Je doute qu'il
y ait une facon de spécifier l'utilisation du bon repertoire, soit qua nd je
crée l'interpréteur avec PerlEz, soit avec un fichier de configurati on.



Vous pouvez ajouter un répertoire à @INC à la création l'interpr éteur avec
PerlEzCreate exactement comme vous le feriez avec perl en ajoutant un -I< rep>
sur la ligne de commande.
(Il faut dire que la doc de PerlEz est vraiment minimale; contrairement à
ce que son nom indique, son utilisation n'est pas si "easy" que ça.)

Le petit programme C qui suit affiche @INC.
Chez moi ça donne :
C:/foo/bar
C:/perl58/lib
C:/perl58/site/lib
.
Le répertoire ajouté est donc placé en tête de @INC

------------
#include <stdio.h>
#include <windows.h>
#include <PerlEz.h>

int main(void)
{
char buffer[200];
int err;

PERLEZHANDLE perl = PerlEzCreate(NULL, "-IC:/foo/bar");

if (!perl) {
printf("Erreur creation perl interpreteur");
return 1;
}

err = PerlEzEvalString(perl, "join "n", @INC", buffer, sizeof(buff er));

if (err)
printf("Erreur #%i", err);
else
printf(buffer);

PerlEzDelete(perl);
return 0;
}
------------

HTH

--
J-L.M.
http://www.bribes.org/perl



Avatar
jl_morel
Dans l'article ,
a dit...

Un simple perl -V ne suffirait-il pas à afficher @INC ?
Chez moi, si. :-)



Quel rapport avec la question posée ?

Il s'agit d'ajouter un chemin à @INC dans un *programme C* qui embarque un
interpréteur Perl avec PerlEz. L'affichage de @INC n'est là que pour
vérification.

--
J-L.M.
http://www.bribes.org/perl