sqlite - 本地 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。
注意可能的重复:
- 无法通过包子类化 DBI 定位对象方法询问模块子类化,而不是我在做什么
附录:从评论中的讨论可以看出,很多用户只关注use DBI
声明。正如我在评论中提到的:
整个目标是利用通过 cpan 安装的 DBI 模块。在安装 DBD::SQLite 之前,使用 lib 和使用 DBI 都没有给出可行的解决方案。因此,单独使用 DBI 的建议没有用。
请注意,在提出问题之前,我已经尝试了这两种方法。 如我的回答中所述,如果不安装模块,该行本身无效。use DBI
use lib qw()
use DBI
DBD::SQLite
解决方案
从命令行脚本转换为实际程序,您的代码如下所示:
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 解决了您的问题。这可能解决了您遇到的另一个问题,但并没有解决您原来问题中的问题。
推荐阅读
- java - 暂停后,如果加密文件很大(例如 10Gb),恢复下载文件在 IE 中不起作用,它在 Chrome 中工作正常
- java - DBPedia 实时端点给出 504 或 503 异常
- spring-boot - 春季安全实施后,它会阻止我的静态文件夹中的所有资源吗?
- node.js - 如何在监视模式下运行 grunt 文件并启用实时重新加载?
- c# - 自定义打印的保存文件对话框
- xamarin.forms - Xamarin 表单 - 可以部署到 iPhone 但不能部署到 iPad(错误代码 0xe8008015)
- reactjs - 在代码更改时自动创建 webpack 构建 reactjs
- jquery - 使用 Jquery 更改 Bootstrap Collapse 上的图标
- javascript - asp子菜单项的垂直切换
- c# - 如何修复“组合框选定索引始终显示第一个值 C#”