Модуль Perl "не вернул истинное значение" - PullRequest
6 голосов
/ 16 февраля 2011

Я следовал учебнику 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__->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 ]

23 голосов
/ 16 февраля 2011

Хотя я не могу сказать, что полностью понимаю, что вы пытаетесь сделать, ошибка, которую вы видите, является довольно распространенной.Любой файл / модуль, включенный в use или require, должен возвращать «истинное» значение.Обычно это достигается путем окончания этого файла строкой 1;, то есть просто командой, которая является истинной (в отличие от 0, являющейся ложным).Посмотрите на любой другой файл, заканчивающийся на .pm в вашей системе, и он, вероятно, закончится таким образом.

Вы также можете прочитать больше в perldoc perlmod, или есть это утверждение из perldoc -f require:

Файл долженверните true в качестве последнего оператора, указывающего на успешное выполнение любого кода инициализации, поэтому обычно такой файл заканчивается на «1;»если вы не уверены, что в противном случае он вернет истину.Но лучше просто поставить «1;», если вы добавите больше операторов.

10 голосов
/ 16 февраля 2011

Последняя строка в любом модуле должна быть

1;
...