Две версии Perl в Mac OS X?

Я установил Шаблонный модуль через CPAN на моем MacBook Pro, и это, казалось, устанавливало правильно.

Но, когда я пытаюсь запустить скрипт, который включает Шаблонный модуль, я получаю следующее:

Не может расположиться Template.pm в @INC (@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.) в./index.pl строке 12.

BEGIN перестала работать - компиляция, прерванная в./index.pl строке 12.

Я затем думаю, что что-то, должно быть, пошло не так, как надо во время установки и попытки установить снова через CPAN, но получить следующее сообщение:

Шаблон актуален (2.22).

Я имею, затем выполнил команду instmodsh, чтобы попытаться найти, где модуль установлен. instmodsh перечисляет эти каталоги:

/opt/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

/opt/local/share/man/man1

/opt/local/share/man/man3

Похоже, что у меня есть некоторые, как получил две различных версии установленного Perl (5.8.9 и 5.10.0), и это вызывает беспорядок между CPAN и другими сценариями Perl.

Как я могу проверить это и как это может выйти быть разрешенным?

Я имею, выполнил команды

which perl
which cpan

и они оба возврат/opt/local/bin

Выполнение

find / -name perl

возвраты

найдите:/dev/fd/3: Не каталог

найдите:/dev/fd/4: Не каталог

/opt/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/share/file/magic/perl

и

find / -name cpan

возвраты

/opt/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'

возвраты

/Users/purinkle/Sites/rob/modules

/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

9
задан purinkle 13 August 2010 в 19:58
поделиться

3 ответа

OS X поставляется с двумя версиями Perl. По умолчанию используется 5.10.0, поэтому / usr / bin / perl и / usr / bin / cpan должны взаимодействовать с 5.10.0.

Проблема в том, что у вас их трое. / opt / local указывает на установку MacPorts , которая, вероятно, установила Perl как зависимость, когда вы не смотрели. Это / opt / local / bin / perl и, вероятно, это perl по умолчанию на вашем пути. Проверьте , какой perl . Это также означает, что вы, вероятно, используете cpan MacPorts, проверьте с помощью , который cpan , и, таким образом, установили Template Toolkit в версию MacPorts.

Я собираюсь предположить, что либо вы запускаете программу с #! / Usr / bin / perl вверху, либо вы используете встроенный mod_perl, либо вы запускаете его как пользователь, который не вы. Все это будет ссылаться на Perl по умолчанию для OS X, а не на установленный вами MacPorts.

Macports имеет 5,10, а также 5,12, но «perl» в Macports по-прежнему 5,8. Вы можете установить 5.10 в Macports.

Что касается решения этой проблемы ... если вы используете на этой машине mod_perl, используйте Perl для Macports. Устанавливать модули будет проще, и она будет обновляться лучше, чем версия ОС.

Чтобы защитить себя от путаницы в будущем, вы можете добавить псевдонимы в / usr / local / bin или ~ / bin для perl, perldoc и cpan для Perl по вашему выбору. Это предотвратит установку Perl на ваш путь и его взлом.

16
ответ дан 4 December 2019 в 08:31
поделиться

начните с этих двух команд:

which perl
which cpan

если у вас разные пути к исполняемым файлам, то есть большая вероятность, что у вас установлены 2 версии или perl. Если они совпадают, скорее всего, у вас неправильно настроен perl @INC. Вы можете добавить пути к @INC bny, включая это в самом начале вашего скрипта (после shebang):

BEGIN {

        push @INC,"/path/to/cpan/modules";

        }  

В любом случае сделайте это:

find / -name perl
find / -name cpan

посмотрите, что вы получите. Это скажет вам, есть ли у вас несколько версий или нет.

2
ответ дан 4 December 2019 в 08:31
поделиться

I went through this process about a month and a half ago when setting up a new MacBook Pro. Getting the MacPorts perl installed, switching to /usr/bin/env perl, and updating my PATH (which, from comments on Schwern's answer, sounds like it's about where you are now) was straightforward and reasonably well-documented.

Figuring out how to get the right perl to show up first in apache's PATH, on the other hand, was hellish and involved way too much googling interspersed with periods of beating my head against the wall for relief.

So, to spare you that, the answer I eventually found was that you need to add a PATH key to /System/Library/LaunchDaemons/org.apache.httpd.plist with the PATH that you want apache to use. Assuming that you're just as unfamiliar with the .plist format as I was at the time, here's my complete current org.apache.httpd.plist, which has been working great for me:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <true/>
        <key>Label</key>
        <string>org.apache.httpd</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/sbin/httpd</string>
                <string>-D</string>
                <string>FOREGROUND</string>
        </array>
        <key>OnDemand</key>
        <false/>
        <key>SHAuthorizationRight</key>
        <string>system.preferences</string>
        <key>EnvironmentVariables</key>
        <dict>
                <key>PATH</key>
                <string>/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin</string>
        </dict>
</dict>
</plist>

Copy/paste that to your system (or just add the EnvironmentVariables key and its accompanying dict to your existing file), restart apache, and you should be set. (Unless I misremembered and it was something else that actually got it working for me, but I'm pretty sure this was it.)

3
ответ дан 4 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: