文件夹在$INC,但模块从其他位置加载



我需要用新的模块版本测试我的项目。 但是由于某种原因,Perl 无法加载它。

docker-compose run -v /data/projects/My-Module:/perl5lib project-container perl -I/perl5lib -MMy::Module -e 'print $INC{"My/Module.pm"}'

它必须打印

/perl5lib

但实际上它打印

/usr/local/share/perl/5.26.1/My/Module.pm

docker-compose run -e PERL5LIB=/perl5lib -v /data/projects/My-Module:/perl5lib project-container perl -MMy::Module -e 'print $INC{"My/Module.pm"}'

请帮助我找到可能的问题。

$ perl --version
This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux-gnu-thread-multi
$ docker-compose --version
docker-compose version 1.24.1, build 4667896

使用此命令(它应该或多或少等同于您正在执行的操作(

docker run perl:5.28 perl -I/xyz -V

无论容器实例中是否存在/xyz,我都可以直观地确认/xyz@INC的第一个条目:

...
Compiled at Aug 15 2019 02:34:38
@INC:
/xyz
/usr/local/lib/perl5/site_perl/5.28.2/x86_64-linux-gnu
/usr/local/lib/perl5/site_perl/5.28.2
/usr/local/lib/perl5/vendor_perl/5.28.2/x86_64-linux-gnu
/usr/local/lib/perl5/vendor_perl/5.28.2
/usr/local/lib/perl5/5.28.2/x86_64-linux-gnu
/usr/local/lib/perl5/5.28.2

鉴于您的消息My/Module.pm需要从另一个地方,我猜你的/perl5lib是空的,或者根本不包含My/Module.pm- 或者以某种方式,替代路径首先出现,然后是你的/perl5lib。不确定情况如何,但我试图列举一些可能性。

无论如何,您应该能够通过运行来检查/perl5lib的内容

docker-compose run -v /data/projects/My-Module:/perl5lib project-container find /perl5lib

(我想find命令在您的容器中可用,但如果没有,请尝试ls -R或类似的东西......

最后。。。如果您在macOS上使用Docker(我无法从您提供的信息中看出(,则需要验证/data/projects/My-Module是否在"文件共享"首选项列表中。否则,无法装入该文件夹。

最新更新