我主要使用Textmate进行OSX Snow Leopard的perl黑客攻击。直到几天前我安装了Macports一切都很好(我听说有传言说macports在/ opt / local中安装了某个版本的perl)。现在,对于我从CPAN安装的任何新软件包,并尝试使用Textmate,当我点击Cmd + R运行它时,它给我一个这样的错误(我之前从CPAN安装了HTML :: TreeBuilder):
Can't locate HTML/TreeBuilder.pm in @INC (@INC contains: /Applications/TextMate.app/Contents/SharedSupport/Bundles/Perl.tmbundle/Support /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 /workspace/PerlScripts/test.pl line 2.
然而,当我从命令行运行它时它运行得很好。如果您注意到,textmate正在使用Perl版本5.10.0。当我从命令行运行“Perl -v”时,它显示版本为5.12.3(参见下面终端的复制粘贴)
This is perl 5, version 12, subversion 3 (v5.12.3) built for darwin-multi-2level
我使用的小perl代码是:
#!/usr/bin/env perl <br/>
use HTML::TreeBuilder; <br/>
print $HTML::TreeBuilder::VERSION."\n";<br/>
print "$INC{'HTML/TreeBuilder.pm'}\n";<br>
然后我从命令行运行“which perl”,它返回了这个:
/opt/local/bin/perl
然后我跑了“打印系统(”perl“);”来自Textmate并返回
/usr/bin/perl
现在我显然有两个版本的perl坐在我的系统中。 5.10.0 Textmate试图引用,哪些看不到我的CPAN安装。 5.12.3,当我从命令行运行它时,它看起来是perl的默认版本,而我的CPAN安装它的那个。我试图取代它:
#! /usr/bin/perl -w
有了这个(已经在谷歌上读到这将强制系统默认perl被文本中选中):
#!/usr/bin/env perl
还没有骰子。 Textmate仍然给出了与我在问题开头提到的相同的错误。那么,有没有办法让它与Textmate一起工作?有没有办法让textmate指向版本5.12.3?
答案 0 :(得分:2)
您需要为OS X设置相关的环境变量。目前您可能只为shell设置了它们。这些可能是PATH和PERL5LIB。
mkdir ~/.MacOSX
touch ~/.MacOSX/environment.plist
defaults write ~/.MacOSX/environment VARIABLE_NAME VARIABLE_VALUE
您需要退出并重新登录以激活它。
答案 1 :(得分:1)
确保TextMate具有$ PATH变量
Textmate中的转到“首选项”,然后转到“高级”选项卡。
在Shell变量下,确保首选perl(和cpan)的路径类似于:
/opt/local/bin:/opt/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
答案 2 :(得分:-1)
您的公司路径可以来自:
perl -e 'print @INC,"\n"'
或者来自perl -V。
很有可能在版本相关的路径组件中安装了HTML :: Treebuilder,因此5.12可以找到,而5.10则不能。
如果是这种情况,您可以使用5.10安装相关模块或使用lib.pm尝试一些技巧:
use lib qw(/usr/perl/site_perl/5.12);
这种事情最好留给你的包管理员,我不建议你在家里这样做,除非你完全确定你在做什么,因为你可能会因版本不兼容而引入微妙的错误(或者它可能会爆炸,但这更容易)。