Perl模块";未返回真实值“0”;
我遵循CPAN上的命令,设置了三个包Perl模块";未返回真实值“0”;,perl,rose-db-object,Perl,Rose Db Object,我遵循CPAN上的命令,设置了三个包 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 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…
My/DB/Object未返回真值第2行…
问候和感谢。虽然我不能说我完全理解您想要实现的目标,但您看到的错误是相当常见的。
use
或require
中包含的任何文件/模块必须返回“true”值。这通常是通过以1行结束该文件来实现的代码>,也就是说一个简单的命令为true(而不是0为false)。查看系统中以.pm结尾的任何其他文件,它很可能以这种方式结束
您也可以在中阅读更多内容,或从以下位置阅读此声明:
文件必须作为最后一个返回true
表示成功的声明
执行任何初始化代码,
因此,通常结束这样一个文件
加上“1”,除非你确定它会
否则返回true。但它是
最好只写上“1;”,以防万一
您可以添加更多语句
任何模块中的最后一行应为
1;
@radkrish,我知道你试图通过编辑来帮助我,但是我认为你改变了问题的一些背景。现在已经不清楚一个文件在哪里结束,下一个文件在哪里开始,这一点很重要,因为正如我在回答中所看到的,如果这都是一个文件,OP就不会得到这个错误。你能仔细检查一下吗edit@Joel,代码格式已撤消。对上下文更改感到遗憾,请遵循Rose::DB的示例。1个包装;这是正常的包装惯例。在这种情况下,包My::DB:Object的最后一行init_DB(My::DB->new)应该在初始化时执行并返回真值。这个命令似乎无法运行。首先,我已经发布了一个非常类似的答案。其次,事实并非如此。use
或require
需要一个真实的返回值,以便在加载时进行诊断。是的,大多数模块都以1结尾代码>但并非所有人都是如此,包括OP,请查看他/她的评论;最后一行是确保返回true。如果附加1;在这种情况下,在提出另一个错误时,不要按照导师的建议行事。@JoelBerger有道理。但是如果你在半夜没有时间,这就是你需要的XXAA。