Модуль 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;", если вы добавите больше операторов.