Perl模块"没有返回真正的价值"

时间:2011-02-16 05:00:50

标签: perl rose-db-object

我按照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…

问候并感谢。

2 个答案:

答案 0 :(得分:21)

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

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

  

该文件必须返回true作为最后一个   声明表明成功   执行任何初始化代码,   所以习惯上结束这样的文件   用“1;”除非你确定它   否则返回true。但它是   更好的只是把“1;”,以防万一   你添加更多的陈述。

答案 1 :(得分:10)

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

1;