【发布时间】:2015-01-01 08:00:36
【问题描述】:
升级到 OS 10.10 后,我不得不再次安装所有以前使用的 perl 模块。没问题。我想。
OS 10.10 上的 Perl 是“这是为 darwin-thread-multi-2level 构建的 perl 5,版本 16,subversion 3 (v5.16.3)”(来自 perl --version)。 @INC 看起来是(尝试 perl -e 'print join("\n", @INC);' 或 perl -V):
/opt/local/lib/perl5/site_perl/5.16.3/darwin-thread-multi-2level /opt/local/lib/perl5/site_perl/5.16.3 /opt/local/lib/perl5/vendor_perl/5.16.3/darwin-thread-multi-2level /opt/local/lib/perl5/vendor_perl/5.16.3 /opt/local/lib/perl5/5.16.3/darwin-thread-multi-2level /opt/local/lib/perl5/5.16.3 /opt/local/lib/perl5/site_perl /opt/local/lib/perl5/vendor_perl
当我尝试使用未知模块时,perl 会抛出: “无法在 @INC 中找到 Mymodule.pm ...然后:@INC 包含:... /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl /5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 和所有其他已知的(并添加了 5.18 perl.pm 文件夹)。 每个 perl 开发人员都知道该消息。 但从字面上看:@INC 显然链接到 5.18 文件夹!乍一看,我应该使用 Perl 5.18。
我从 Macports 安装了我的第一批新模块。 5.18 端口文件。并将新的模块路径添加到列表 /Library/Perl/5.18/AppendToPath。工作得很好。 但是,当我使用 cpan 安装一个模块(在 Macports 中不作为 5.18 提供)时,我遇到了麻烦。该模块是用 5.16 编译的(当然,见上文)并且不被接受为 AppendToPath 文件中的其他路径。 Dynaloader 不匹配。
我不知道@INC 列表在运行时在哪里更改。在早期的 Mac OS 10 版本中,新的 @INC 包含相同版本的模块版本。 IE。一个活动的 perl 5.14 还包括 5.14 模块,5.12 包括 5.12 路径 a.s.o。 为什么 Yosemite 上的 perl 5.16 包含 5.18 模块路径?
在我的帖子之后添加一些混乱: 当我尝试在程序代码中打印 $^V 时,我得到 5.18。 这意味着,你没有得到你想要得到的东西。可能是我的 shebang #!/usr/bin/perl 开始于 5.18 而不是 5.16。
【问题讨论】:
-
检查您对 PERL5LIB 或 PERLLIB 环境变量的设置(
echo $PERL5LIB等)。 -
如果可能的话,我会使用 Perlbrew。与系统或 MacPorts Perl 混用总是很麻烦的。
-
我当然已经检查过了。两者都是空的。注意,我编辑了我的帖子。 perl --version 的问题与 shebang 开头的含义有些不同。
-
我想知道这里发生了什么的原因。 shebang 确实在 /usr/bin 中调用了 perl bin。问题“which perl”显示 /opt/local/bin/perl(perl 5.16 的符号链接)。 /usr/bin/perl 显然是 perl 5.18。我必须将我的 cpan 配置为使用 5.18。谢谢朋友的cmets。
标签: perl osx-yosemite