Mac OS X中有两个版本的Perl?

pur*_*kle 9 macos perl templates cpan osx-snow-leopard

我已经在我的MacBook Pro上通过CPAN安装了模板模块,它似乎安装正确.

但是,当我尝试运行包含模块模块的脚本时,我得到以下内容:

无法在@INC中找到Template.pm(@INC包含:/ Users/purinkle/Sites/rob/modules /Library/Perl/Updates/5.10.0/darwin-thread-multi-2level/Library/Perl/Updates/5.10.0 /System/Library/Perl/5.10.0/darwin-thread-multi-2level /System/Library/Perl/5.10.0/Library/Perl/5.10.0/darwin-thread-multi-2level/Library/Perl/5.10.0 /Network/Library/Perl/5.10.0/darwin-thread-multi-2level /Network/Library/Perl/5.10.0/Network/Library/Perl/System/Library/Perl/Extras/5.10. 0/darwin-thread-multi-2level /System/Library/Perl/Extras/5.10.0.)at ./index.pl第12行.

BEGIN失败 - 编译在./index.pl第12行中止.

然后我认为在安装过程中出现问题并尝试通过CPAN再次安装但收到以下消息:

模板是最新的(2.22).

然后我运行了instmodsh命令来尝试找到模块的安装位置.instmodsh列出了这些目录:

/选择/ local/bin目录

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Manual

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Namespace

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Plugin

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Stash

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Tools

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Tutorial

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/Template/Stash/XS

/选择/本地/共享/人/ MAN1

/选择/本地/共享/人/ man3

看起来我有一些如何安装两个不同版本的Perl(5.8.9和5.10.0),这导致CPAN和其他Perl脚本之间的混淆.

如何验证此问题以及如何解决此问题?

我已经运行了命令

which perl
which cpan
Run Code Online (Sandbox Code Playgroud)

他们都返回/ opt/local/bin

运行

find / -name perl
Run Code Online (Sandbox Code Playgroud)

回报

find:/ dev/fd/3:不是目录

find:/ dev/fd/4:不是目录

/选择/ local/bin中/ perl的

/opt/local/etc/bash_completion.d/perl

/opt/local/var/macports/software/bash-completion/1.2_0/opt/local/etc/bash_completion.d/perl

/opt/local/var/macports/software/perl5.8/5.8.9_3/opt/local/bin/perl

/opt/local/var/macports/sources/rsync.macports.org/release/ports/perl

在/ usr/bin中/ perl的

在/ usr/local/bin中/ perl的

在/ usr /共享/文件/魔法/ perl的

find / -name cpan
Run Code Online (Sandbox Code Playgroud)

回报

/选择/ local/bin目录/ CPAN

/opt/local/var/macports/software/perl5.8/5.8.9_3/opt/local/bin/cpan

/Users/purinkle/.cpan/build/CPAN-1.9402-KtN827/blib/script/cpan

/Users/purinkle/.cpan/build/CPAN-1.9402-KtN827/scripts/cpan

/Users/purinkle/.cpan/build/CPAN-1.9402-zb0AeX/blib/script/cpan

/Users/purinkle/.cpan/build/CPAN-1.9402-zb0AeX/scripts/cpan

在/ usr/bin中/ CPAN

运行

perl -e 'print join "\n", @INC'
Run Code Online (Sandbox Code Playgroud)

回报

/用户/ purinkle /站点/抢劫/模块

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level

/opt/local/lib/perl5/site_perl/5.8.9

的/ opt/local/lib目录/ perl5的/ SITE_PERL

/opt/local/lib/perl5/vendor_perl/5.8.9/darwin-2level

/opt/local/lib/perl5/vendor_perl/5.8.9

的/ opt/local/lib目录/ perl5的/ vendor_perl

/opt/local/lib/perl5/5.8.9/darwin-2level

/opt/local/lib/perl5/5.8.9

Sch*_*ern 16

OS X附带两个版本的Perl.5.10.0是默认值,因此/ usr/bin/perl和/ usr/bin/cpan都应该与5.10.0通信.

问题是你有三个. /opt/local表示MacPorts安装可能在您不看时将Perl安装为依赖项.这是/ opt/local/bin/perl,它可能是你路径中的默认perl.检查which perl.这也意味着你可能正在使用MacPorts的cpan,检查which cpan并因此将Template Toolkit安装到MacPorts版本中.

我猜你要么#!/usr/bin/perl在顶部运行一个程序,要么你正在使用内置的mod_perl,或者你是以不是你的用户身份运行它.所有这些都将引用OS X的默认Perl而不是MacPorts安装.

Macports有5.10和5.12,但Macports中的"perl"仍为5.8.您可以在Macports中安装5.10.

至于如何解决这个问题...如果你在该机器上使用mod_perl,请使用Macports的Perl.安装模块会更容易,并且它将比操作系统版本更新.

从未来的迷茫保护自己,你可以添加别名成/usr/local/bin~/bin成Perl,并参阅perldoc CPAN到您选择的Perl的.这将阻止其他东西在您的路径中安装perl并劫持.

  • @purinkle =>我用`#!/ usr/bin/env perl`开始我的脚本,它通常会给你你正在寻找的perl. (6认同)