11

我按照 CPAN 上的Rose::DB::Object 教程设置了三个包。

package My::DB::Object;
use My::DB;
use base qw(Rose::DB::Object);
sub init_db { My::DB->new }

package My::DB;
use base qw(Rose::DB);
...

package Motorcycle;
use base 'My::DB::Object';

__PACKAGE__->meta->setup
(
  ...
);

__PACKAGE__->meta->make_manager_class('motorcycles');

在应用程序中:

package main;

use Motorcycle;
use Mojolicious::Lite;

编译失败并出现此错误:

My/DB/Object did not return a true value <eval 2> line 2…

问候和感谢。

4

2 回答 2

23

虽然我不能说我完全理解您要完成的工作,但您看到的错误是一个相当普遍的错误。包含在userequire必须返回“真”值的任何文件/模块。这通常是通过以行结束该文件来完成的1;,也就是说,只是一个为真的命令(而不是 0 为假)。查看系统上任何其他以 .pm 结尾的文件,它很可能以这种方式结束。

您还可以在 中阅读更多内容perldoc perlmod,或者以下声明perldoc -f require

该文件必须返回 true 作为最后一条语句,以指示任何初始化代码的成功执行,因此习惯上以“1;”结束此类文件 除非你确定它会返回 true 否则。但最好只输入“1;”,以防您添加更多语句。

于 2011-02-16T05:14:20.403 回答
17

任何模块中的最后一行应该是

1;
于 2011-02-16T14:41:04.887 回答