首页 > 解决方案 > 本地 Perl DBI 模块,找不到对象方法“连接”

问题描述

我已经DBI通过cpan. CPAN 已配置为使用本地目录,所以我有~/perl5~/.cpan目录。该模块显然是 in ~/.cpan/build/DBI-1.642-0,实际上那里确实有DBI.pm文件。

但是,当我执行以下命令作为测试时,该命令表明没有“连接”对象:

$ perl -e 'use lib qw( .cpan/build/DBI-1.642-0/ ); DBI->connect("dbi:SQLite:dbname=foo.sqlite","","");'
Can't locate object method "connect" via package "DBI" (perhaps you forgot to load "DBI"?) at -e line 1.

环境:基于 Debian 的发行版,perl 5.26.2。

注意可能的重复:


附录:从评论中的讨论可以看出,很多用户只关注use DBI声明。正如我在评论中提到的:

整个目标是利用通过 cpan 安装的 DBI 模块。在安装 DBD::SQLite 之前,使用 lib 和使用 DBI 都没有给出可行的解决方案。因此,单独使用 DBI 的建议没有用。

请注意,在提出问题之前,我已经尝试了这两种方法。 如我的回答中所述,如果不安装模块,该行本身无效。use DBIuse lib qw()use DBIDBD::SQLite

标签: sqliteperldbi

解决方案


从命令行脚本转换为实际程序,您的代码如下所示:

use lib qw( .cpan/build/DBI-1.642-0/ );

DBI->connect("dbi:SQLite:dbname=foo.sqlite","","");

你得到的错误信息是:

无法在 -e 第 1 行通过包“DBI”找到对象方法“connect”(也许您忘记加载“DBI”?)。

这个错误很明显。

(也许你忘了加载“DBI”?)

这里的问题是您缺少实际加载 DBI 模块的代码行。你需要添加这个:

use DBI;

你的use lib qw( .cpan/build/DBI-1.642-0/ )台词很奇怪。您要求 Perl 从安装期间使用的临时构建目录加载模块。这根本不是您想要使用的版本。完成cpan工作后,您将在标准 Perl 库目录中安装一个 DBI 版本,您无需任何use lib代码即可访问该版本。

我还要补充一点,如果您使用的是系统安装的 Perl 版本,则无需使用cpan安装最流行的模块。您可以使用您的发行版的预构建软件包存储库。例如apt get install libdbi-perl(在 Debian 和类似平台上)或dnf install perl-DBI(在 Red Hat 上)。

在您的回答中,您默默地添加了缺少的use DBI语句,并声称安装 DBD::SQLite 解决了您的问题。这可能解决了您遇到的另一个问题,但并没有解决您原来问题中的问题。


推荐阅读