2016-11-19 174 views
2

操作系统:Mac 10.12.1中,MySQL 5.7.15即使cpan告诉我DBD :: mysql已安装,为什么我的Perl脚本找不到DBD/mysql.pm?

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告诉shell使用'/ usr/bin/perl'来执行脚本。脚本,shell和环境都在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 by brian d foy may help。我个人发现,诸如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

相关问题