Модуль 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__->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 ответа

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

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

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

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

1;
Другие вопросы по тегам