perl - 文件夹位于 $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
是否在“文件共享”首选项列表中。否则无法挂载该文件夹。
推荐阅读
- c++ - Linux C++ 套接字上的简单 HTTP 服务器
- php - 另一个if语句为假,返回原if语句的else
- python-3.x - 如何在skimage中获取轮廓区域
- java - 函数 .contains() 在 Groovy 中无法按预期方式工作
- node.js - 如何在 React 中处理输入的“Enter”
- apache-kafka - Confluent 4.1.0 -> KSQL:STREAM-TABLE 连接 -> 表数据为空
- qt - 组件的 QML 工具提示
- r - 选择 data.table 的所有行,其中变量是列名,其值为 TRUE
- haskell - 从 Coq 中提取时可以自动添加 Haskell 导入语句吗?
- java - Java spring 错误持久性导入不起作用