Я установил Шаблонный модуль через 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
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 на ваш путь и его взлом.
начните с этих двух команд:
which perl
which cpan
если у вас разные пути к исполняемым файлам, то есть большая вероятность, что у вас установлены 2 версии или perl. Если они совпадают, скорее всего, у вас неправильно настроен perl @INC. Вы можете добавить пути к @INC bny, включая это в самом начале вашего скрипта (после shebang):
BEGIN {
push @INC,"/path/to/cpan/modules";
}
В любом случае сделайте это:
find / -name perl
find / -name cpan
посмотрите, что вы получите. Это скажет вам, есть ли у вас несколько версий или нет.
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.)