2014-01-27 63 views
1

我试着从CPAN安装DBD-SQLite-0.31模块。我从CPAN下载了DBD-SQLite-0.31。我试着安装它,它给了我一个先决条件的错误DBI模块不在那里。从CPAN安装perl模块时出错

我已经从CPAN安装了DBI模块,然后安装了DBD-SQLite-0.31

当我试图运行perl的声明 use DBI DBD::SQLite;,它给了一个错误

"DBD::SQLite" is not exported by the DBI module 
Can't continue after import errors at DBI.txt line 3 
BEGIN failed--compilation aborted at DBI.txt line 3. 

为什么发生错误?

当我尝试调试它时,发现要运行语句use DBI DBD::SQLite;,DBD :: SQLite需要位于DBI目录中,但都位于不同的目录中。我甚至在DBI文件夹中复制了DBD :: SQLite,但问题仍然存在。 (这些都是我的野生猜测)

+0

您需要分别为DBI和DBD :: SQLite的2个独立的'use'语句。你不能导入一个,这是不正确的语法。 – 2014-01-27 14:51:11

+1

@ DA14,根本不需要DBD :: SQLite的'use'语句。当您连接到SQLite数据库时,它将由DBI自动加载。 – cjm

回答

4

声明use DBI是你想要的。

将模块名称后面的任何内容作为参数传递给导入模块的import方法。

+0

为什么它在导入时出错 – Nitesh

+4

因为'DBD :: SQLite'不是导入方法的有效参数。在大多数情况下,您提供了应在当前名称空间中进行嵌套的子列表。 – gensym

3

发生什么事是你不应该在单个use声明中提到多个模块。有关使用线的额外信息可以包括模块的最小版本号或模块应导出的项目列表。 perldoc -f use血淋淋的细节...

一般来说,你不会明确use DBD::SQLite;。它通常会在DBI->connect()的第一个参数中隐式加载。

+0

它工作:)。谢谢 – Nitesh

+0

任何方法或函数调用后请不要使用不必要的parens。只要有可能就将它们排除在外,这是很好的Perl风格,只有在Perl解析器无法识别你想要做什么时才使用它。 – Mithaldu