首页 > 解决方案 > 文件夹位于 $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

标签: perldocker

解决方案


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

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是否在“文件共享”首选项列表中。否则无法挂载该文件夹。


推荐阅读