2016-11-19 4 views
2

ОС: Mac 10.12.1, MySQL 5.7.15Почему мой скрипт Perl не находит DBD/mysql.pm, хотя cpan сообщает мне, что DBD :: mysql установлен?

perl -e 'print $];' 
5.016000

Сообщение об ошибке:

Can't locate DBD/mysql.pm in @INC (you may need to install the DBD::mysql module) (@INC contains: /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .) at ./testDBConnection.pl line 8. BEGIN failed--compilation aborted at ./testDBConnection.pl line 8.

Исходный код:

#!/usr/bin/perl 

#use lib '/usr/bin/cpan'; 
use strict; 
use FileHandle; 
use File::Spec; 
use DBI; 
use DBD::mysql; 

Когда я бегу: cpan DBD::mysql

Reading '/Users/user/.cpan/Metadata' 
    Database was generated on Fri, 18 Nov 2016 19:41:02 GMT 
DBD::mysql is up to date (4.039). 

Когда я бегу: perldoc -lm DBI DBD::mysql

/Users/user/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/darwin-2level/DBI.pm

/Users/user/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/darwin-2level/DBD/mysql.pm

Есть предложения?

+0

Похоже, вы используете perlbrew. Проверьте https://perlbrew.pl/ –

+0

попробуйте запустить скрипт непосредственно с perl: 'perl script.pl'. Кроме того, изменение вашей строки shebang на '#!/Usr/bin/env perl' также может исправить ее также – stevieb

+0

@stevieb Проблема в том, что OP сообщает оболочке использовать'/usr/bin/perl' для выполнения скрипта , Скрипт, оболочка и среда находятся под контролем OP.Нет необходимости в обходных решениях. –

ответ

3

Ваша строка shebang относится к /usr/bin/perl. Это интерпретатор, который будет использоваться для выполнения вашего скрипта.

/usr/bin/perl является perl, который поставляется вместе с вашей системой. Вы поступили правильно, не возившись с модулями, которые пришли с ним, и вместо этого установили свои собственные. Теперь вы должны сказать, что ваш скрипт использует его.

Похоже, что правильное perl уже на вашем пути. Используйте which perl, чтобы увидеть полный путь к нему.

Как примечание стороны, там действительно нет оснований для линии

use DBD::mysql; 

. DBI будет выбирать, какой драйвер загружать на основе вашей строки подключения.

Подробнее о shebang lines, см. my answer on a different question.

Make links to per-version tools от brian d foy может помочь. Я лично считаю, что инструменты, такие как perlbrew, являются скорее препятствием, чем помощью.

+1

Спасибо, что сейчас это работает для меня. – user1256378

0

Я думаю, вы ответили на свой вопрос. perldoc сообщает вам, что DBI: mysql установлен в /Users/user/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/darwin-2level/DBD/mysql.pm, и perl сообщает вам, что INC не содержит этот путь.

Простым решением для запуска является либо запуск perl -I <path above>, либо use lib <path above>;. Я уверен, что есть лучшее решение, но этого достаточно, чтобы вы начали решать свою собственную проблему.

+0

Спасибо Mort за советы. – user1256378

Смежные вопросы