11

CPANのRose::DB :: Objectチュートリアルに従い、3つのパッケージを設定しました。

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

あなたが達成しようとしていることを完全に理解しているとは言えませんが、表示されているエラーはかなり一般的なものです。useorに含まれるすべてのファイル/モジュールはrequire、「true」値を返す必要があります。これは通常、そのファイルを行1;で終了することによって実現されます。つまり、(0 が false ではなく) true であるコマンドです。システム上の .pm で終わる他のファイルを見てください。このように終わる可能性があります。

で詳細を読むこともできますperldoc perlmod。または、次のステートメントがありperldoc -f requireます。

初期化コードの実行が成功したことを示すために、ファイルは最後のステートメントとして true を返す必要があるため、このようなファイルは "1;" で終了するのが通例です。それ以外の場合は true を返すことが確実でない限り。ただし、さらにステートメントを追加する場合に備えて、「1;」を配置することをお勧めします。

于 2011-02-16T05:14:20.403 に答える
17

モジュールの最後の行は次のようになります

1;
于 2011-02-16T14:41:04.887 に答える