2012-01-16 7 views
0

私は主にOSX Snow LeopardでperlのハッキングにTextmateを使用しています。数日前に私がMacportsをインストールしたときには大丈夫でした(私はmacportsが/ opt/localにperlのいくつかのバージョンをインストールするという噂を聞いてきました)。今、CPANからインストールし、Textmateからifを使用しようとすると、Cmd + Rを実行するとエラーが発生します(前回のCPANからHTML :: TreeBuilderをインストールしました)。Textmateからいくつかのperlスクリプトを実行します(@INCエラーで見つけることはできません)

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のコードはこれです:

"

/opt/local/bin/perl 
その後、

私が走った "プリントシステム(" これはperlの);":

#!/usr/bin/env perl <br/> 
use HTML::TreeBuilder; <br/> 
print $HTML::TreeBuilder::VERSION."\n";<br/> 
print "$INC{'HTML/TreeBuilder.pm'}\n";<br> 

は、それから私は走った、コマンドラインから "のperlた" と、それはこれを返さTextmateから返されました。

/usr/bin/perl 

私のシステムには2つのバージョンのperlがあります。 5.10.0 Textmateは参照しようとしていますが、CPANのインストールが見えません。コマンドラインからCPANをインストールしたときのデフォルトのバージョンのperlと思われる5.12.3もあります。これで

#! /usr/bin/perl -w 

(これはTextMateでピックアップするシステムのデフォルトのperlを強制することをGoogleで読んでいた):私はこれを交換しようとしたん

#!/usr/bin/env perl 

ませサイコロはまだありません。 Textmateは質問の冒頭で述べたのと同じエラーを表示します。ですから、Textmateで動作させる方法はありますか?そして、テキストメイトがバージョン5.12.3を指し示すようにする方法はありますか?

答えて

2

OS Xに関連する環境変数を設定する必要があります。現時点では、シェル用に設定する必要があります。これらはおそらくPATHとPERL5LIBになります。

mkdir ~/.MacOSX 
touch ~/.MacOSX/environment.plist 
defaults write ~/.MacOSX/environment VARIABLE_NAME VARIABLE_VALUE 

有効にするには、ログアウトしてもう一度ログインする必要があります。

perl -e 'print @INC,"\n"' 

やPerl -Vから:

+0

感謝:

の下ではシェル変数、のようなものがあり、ご希望のperl(及びCPAN)へのパスを確認してください。私はコマンドラインで "echo $ PATH"を走らせていましたが、それは私が与えた道のりでした。私はそれらをenvironment.plistに入れました。それから、コマンドラインで "echo $ PERL5LIB"を実行し、何も返さなかった。それはシェルにも設定されていなかったことを意味します。私はシェルからperlスクリプトを実行できますが、textmateから実行するだけで問題が発生することに注意してください。とにかく、私はenvironment.plist "/ opt/local/bin/perl"にPERL5LIBの次の値を入力しました。その後、私は閉鎖し、テキストメイトから退場して再開しました。それでもエラーは同じです。私は何か間違っているのですか? – Anshu

+0

Perlライブラリパスも設定する必要があります。それが '@ INC'を定義するものです。 – Quentin

+0

PERL5LIBライブラリのパス "/ opt/local/bin/perl"が正しくありませんか?コマンドラインで "which perl"のパスを取得します。 – Anshu

-1

あなたINCパスから得ことができます。

バージョン依存のパスコンポーネントにHTML :: Treebuilderをインストールした可能性が高いため、5.12ではfinditが可能ですが、5.10ではそうではありません。

この場合、関連するモジュールを5.10でインストールするか、libでいくつかのトリックを試してみてください。午後:

use lib qw(/usr/perl/site_perl/5.12); 

物事のこの種のは、最良しかし、あなたのパッケージマネージャに残っている、と私はあなたが何をしているかの完全に確信している場合を除き、あなたが原因微妙なバグを紹介する可能性があるとして、あなたは、自宅でこれを行うに助言するものではありません。バージョンの互換性を失うことになります(またはそれが爆発する可能性はありますが、それは簡単です)。

+0

応答のためのALFに感謝します。私は既に "perl -V"を実行し、INCのための一連のパスを持っていました。私が知りたいのは、私のTextmateをこれらのパスに "見せる"方法です。私はenvoronment.plistでPERL5LIBの値としてこれを設定しましたが、Textmateのエラーは依然として "/opt/local/lib/perl5/site_perl/5.12.3/darwin-multi-2level:/opt/local/lib/perl5のままです。 /site_perl/5.12.3:/opt/local/lib/perl5/vendor_perl/5.12.3/darwin-multi-2level:/opt/local/lib/perl5/vendor_perl/5.12.3:/opt/local/lib/ perl5/5.12.3/darwin-multi-2level:/opt/local/lib/perl5/5.12.3:/ opt/local/lib/perl5/site_perl:/ opt/local/lib/perl5/vendor_perl – Anshu

+0

まあ、それです#!/ opt/local/bin/perlを1行目として使用すると、その問題は完全に解消されます。 –

+0

ALFに感謝します。任意の違い。 – Anshu

1

はTextMateはTextMateであなたの$ PATH変数

を持っていることを確認してください設定、[詳細設定]タブに移動します。応答クエンティンため

/opt/local/bin:/opt/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

+0

応答ありがとうチャクラム。私はすでにそこにそれらを持っていた。私は ":/ opt/local/bin:/ opt/local /:/ opt/local"を追加しましたが、textmateは私に同じエラーを与えます。 – Anshu

関連する問題