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

Incoherences dans @INC

4 réponses
Avatar
xavier
Bonjour,

J'ai un script perl qui m'injurie à propos d'un module non trouvé :

> Can't locate Net/MAC.pm in @INC (@INC contains:
> /Library/Perl/Updates/5.10.0/darwin-thread-multi-2level
> ...etc, les INC standard de MacOSX

Pourtant, lorsque je fais perl -e 'print @INC;' j'ai les répertoires où
se trouvent le perlmod en question :

> [xavier@imac-xav ~]$ /usr/bin/perl -e 'print @INC;'
> /sw/lib/perl5/5.10.0/darwin-thread-multi-2level /sw/lib/perl5/5.10.0/
> ... puis les emplacements standard

Comment se fait il que perl lancé en one-liner les trouve, et pas lancé
par le shebang ?. D'ailleurs, la commande "perl bin/monscript.pl"
m'injurie également.

Ca fait pourtant des années que j'utilise ça. Dans mon login il y a ce
qu'il faut :

> if [ -z "$PERL5LIB" ]; then
> PERL5LIB=/sw/lib/perl5:/sw/lib/perl5/darwin
> else
> prepend_path PERL5LIB /sw/lib/perl5:/sw/lib/perl5/darwin
> fi
> export PERL5LIB

Ca a toujours marché jusqu'ici, je ne comprends pas.

Merci,

--
Xav
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)

4 réponses

Avatar
Denis Dordoigne
Bonjour,

Ca a toujours marché jusqu'ici, je ne comprends pas.


Est-ce que l'option -T ne serait pas activée dans le shebang ?

http://perl.enstimac.fr/DocFr/perlsec.html#mode%20taint%20et%



--
Denis Dordoigne
Membre de l'April - promouvoir et défendre le logiciel libre - april.org
Rejoignez maintenant plus de 5 000 personnes, associations,
entreprises et collectivités qui soutiennent notre action
Avatar
Paul Gaborit
À (at) Mon, 30 Aug 2010 15:41:00 +0200,
(Xavier) écrivait (wrote):

J'ai un script perl qui m'injurie à propos d'un module non trouvé :

Can't locate Net/MAC.pm in @INC (@INC contains:
/Library/Perl/Updates/5.10.0/darwin-thread-multi-2level
...etc, les INC standard de MacOSX



Pourtant, lorsque je fais perl -e 'print @INC;' j'ai les répertoires où
se trouvent le perlmod en question :

[ ~]$ /usr/bin/perl -e 'print @INC;'
/sw/lib/perl5/5.10.0/darwin-thread-multi-2level /sw/lib/perl5/5.10.0/
... puis les emplacements standard



Comment se fait il que perl lancé en one-liner les trouve, et pas lancé
par le shebang ?. D'ailleurs, la commande "perl bin/monscript.pl"
m'injurie également.

Ca fait pourtant des années que j'utilise ça. Dans mon login il y a ce
qu'il faut :

if [ -z "$PERL5LIB" ]; then
PERL5LIB=/sw/lib/perl5:/sw/lib/perl5/darwin
else
prepend_path PERL5LIB /sw/lib/perl5:/sw/lib/perl5/darwin
fi
export PERL5LIB



Ca a toujours marché jusqu'ici, je ne comprends pas.



N'avez-vous pas plusieurs versions de perl (celle d'Apple et d'autres) ?
Les commandes suivantes donnent-elles la même chose :

% perl -V
% /usr/bin/perl -V

Autre possibilité : vous utilisez l'option -T sur votre ligne de
shebang...

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
xavier
Paul Gaborit wrote:

N'avez-vous pas plusieurs versions de perl (celle d'Apple et d'autres) ?



Non, je prends bien soin de refuser à chaque fois que Fink veut
m'installer perl588-core

Les commandes suivantes donnent-elles la même chose :

% perl -V
% /usr/bin/perl -V



Oui,

[ ~]$ perl -V (ou /usr/bin/perl -V)
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
Platform:
osnameÚrwin, osvers.0, archnameÚrwin-thread-multi-2level
uname='darwin neige.apple.com 10.0 darwin kernel version 10.0.0d8:
tue may 5 19:29:59 pdt 2009; root:xnu-1437.2~2release_i386 i386 '
[...]
%ENV:
PERL5LIB="/sw/lib/perl5:/sw/lib/perl5/darwin:/sw/lib/perl5/darwin:
/sw/lib/perl5"
@INC:
/sw/lib/perl5/5.10.0/darwin-thread-multi-2level
/sw/lib/perl5/5.10.0
/sw/lib/perl5/darwin-thread-multi-2level
/sw/lib/perl5
/sw/lib/perl5/darwin
/sw/lib/perl5/darwin
/sw/lib/perl5/5.10.0/darwin-thread-multi-2level
/sw/lib/perl5/5.10.0
/sw/lib/perl5/darwin-thread-multi-2level
/sw/lib/perl5
/Library/Perl/Updates/5.10.0/darwin-thread-multi-2level
/Library/Perl/Updates/5.10.0



Autre possibilité : vous utilisez l'option -T sur votre ligne de
shebang...



J'y avais pensé, mais non, juste le "#!/usr/bin/perl -w" habituel...

Bon, je crois que j'ai trouvé : c'est sudo qui merdoie...

$ sudo monscript.pl foire
$ sudo su -
# /Users/xavier/bin/monscript.pl ça marche

En rajoutant
Defaults env_keep += "PERL5LIB"
à sudoers, ça marche. C'était sioux à trouver, et Apple a dû modifier
son fichier sudoers à un moment où un autre, puisque ça fait au moins 7
ou 8 ans que j'utilisais des perlmods de fink (ou les miens dans
fink/dist/local en l'occurence)

Merci à vous deux.

--
Xav
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
Avatar
Paul Gaborit
À (at) Mon, 30 Aug 2010 16:56:08 +0200,
(Xavier) écrivait (wrote):

Bon, je crois que j'ai trouvé : c'est sudo qui merdoie...



Ah ? D'où vient ce 'sudo' dont vous ne nous parliez pas dans le message
initial ?

$ sudo monscript.pl foire
$ sudo su -
# /Users/xavier/bin/monscript.pl ça marche

En rajoutant
Defaults env_keep += "PERL5LIB"
à sudoers, ça marche.



Tant mieux.

C'était sioux à trouver, et Apple a dû modifier son fichier sudoers à
un moment où un autre, puisque ça fait au moins 7 ou 8 ans que
j'utilisais des perlmods de fink (ou les miens dans fink/dist/local en
l'occurence)



Si vous aviez évoqué tout de suite 'sudo', nous vous aurions sans doute
aiguillé vers ce genre de problèmes. Moi, ce qui m'étonne, c'est que ça
marchait avant.

Merci à vous deux.



De rien, finalement... ;-)

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>