我按照CPAN上的Rose::DB::Object tutorial设置了三个包。
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…
问候并感谢。
答案 0 :(得分:21)
虽然我不能说我完全理解你想要完成的是什么,但你看到的错误是一个相当常见的错误。 use
或require
附带的任何文件/模块都必须返回“true”值。这通常是通过使用行1;
结束该文件来完成的,也就是说只是一个为真的命令(而不是0为假)。查看系统上以.pm结尾的任何其他文件,它很可能以这种方式结束。
您还可以在perldoc perlmod
中阅读更多内容,或者perldoc -f require
中有此声明:
该文件必须返回true作为最后一个 声明表明成功 执行任何初始化代码, 所以习惯上结束这样的文件 用“1;”除非你确定它 否则返回true。但它是 更好的只是把“1;”,以防万一 你添加更多的陈述。
答案 1 :(得分:10)
任何模块的最后一行都应该是
1;