Не могу запустить некоторые Perl-скрипты из TextMate (не удается найти в @INC ошибка) - PullRequest
0 голосов
/ 16 января 2012

Я в основном использую Textmate для Perl-взлома на OSX Snow Leopard.Все было хорошо, пока несколько дней назад я не установил Macports (до меня дошел слух, что macports устанавливает какую-то версию perl в / opt / local).Теперь для любого нового пакета, который я устанавливаю из CPAN и пытаюсь использовать if из Textmate, он выдает такую ​​ошибку, когда я нажимаю Cmd + R для его запуска (я установил HTML :: TreeBuilder из CPAN несколько минут назад):

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

, затем я запустил «print system (« which perl »);»от TextMate и он вернулся

/usr/bin/perl

Теперь у меня явно есть две версии Perl, сидящие в моей системе.5.10.0, на который Textmate пытается сослаться и который не видит мои установки CPAN.И 5.12.3, которая выглядит как версия perl по умолчанию, когда я запускаю ее из командной строки и ту, в которую устанавливает мой CPAN.Я попытался заменить это:

#! /usr/bin/perl -w

на это (читал в Google, что это заставит системный perl быть выбранным в textmate):

#!/usr/bin/env perl

Пока нет кубиков,Textmate по-прежнему выдает мне ту же ошибку, о которой я упоминал в начале вопроса.Итак, есть ли способ заставить его работать с Textmate?И есть ли способ заставить textmate указать на версию 5.12.3?

Ответы [ 3 ]

2 голосов
/ 16 января 2012

Вам необходимо установить соответствующие переменные окружения для OS X. На данный момент вы, вероятно, настроили их только для вашей оболочки. Вероятно, это будут PATH и PERL5LIB.

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

Вам нужно будет выйти и снова войти, чтобы активировать его.

1 голос
/ 16 января 2012

Убедитесь, что TextMate имеет переменные $ PATH

в Textmate, перейдите в «Предпочтения», затем на вкладку «Дополнительно».

В разделе «Переменные оболочки» убедитесь, что путь к предпочитаемому вами perl (и cpan) есть что-то вроде:

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

0 голосов
/ 16 января 2012

Ваш путь inc можно получить из:

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);

ЭтоОднако некоторые вещи лучше оставить вашему менеджеру пакетов, и я не советую вам делать это дома, если вы не полностью уверены в том, что делаете, поскольку вы можете вносить незначительные ошибки из-за несовместимости версий (или это может просто взорвать), но это проще).

...