为什么我的Perl脚本找不到DBD / mysql.pm,即使cpan告诉我DBD :: mysql已安装?

时间:2016-11-19 19:18:09

标签: perl

操作系统:Mac 10.12.1,mysql 5.7.15

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

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

你的shebang线是指/usr/bin/perl。这是将用于执行脚本的解释器。

/usr/bin/perl是系统附带的perl。你没有弄乱随附的模块,而是安装自己的模块,从而做到了正确的事情。现在,您应该告诉您的脚本使用它。

看起来您的路径中已经存在正确的perl。使用which perl查看完整路径。

作为旁注,实际上没有理由

use DBD::mysql;

线。 DBI将根据您的连接字符串选择要加载的驱动程序。

有关shebang lines的更多信息,请参阅my answer on a different question

brian d foy的{p> Make links to per-version tools可能有所帮助。我个人认为像perlbrew这样的工具更多的是障碍而不是帮助。

答案 1 :(得分: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>;。我确信这是一个更好的解决方案,但这足以让你开始解决自己的问题。