2011-02-16 2 views
4

Я следил за Rose::DB::Object tutorial на CPAN и настраивал три пакета.Модуль Perl «не вернул истинное значение»

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… 

С уважением и спасибо.

+0

@radkrish, я знаю, что вы пытались помочь, редактируя, однако я думаю, что вы изменили какой-то контекст вопроса. Теперь уже не видно, где заканчивается один файл, а следующий начинается, это важно, поскольку, как видно из моего ответа, если это все один файл, OP не получит эту ошибку. Не могли бы вы внимательно проверить это редактирование. –

+0

@Joel, формат кода отменен. Сожаление к изменению контекста –

ответ

19

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

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

The file must return true as the last statement to indicate successful execution of any initialization code, so it's customary to end such a file with "1;" unless you're sure it'll return true otherwise. But it's better just to put the "1;", in case you add more statements.

+0

Просто следуйте примеру Rose :: DB. Eding пакет с 1; обычная упаковка практика. В этом случае предполагается, что пакет My :: DB: последняя строка init_db объекта (My :: DB-> new) испустит инициализацию и вернет истинное значение. Кажется, что эта команда не запускалась. – Weiyan

6

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

1; 
+0

Прежде всего, я уже отправил ОЧЕНЬ ПОДОБНЫЙ ответ. Во-вторых, это неверно. «Использовать» или «требовать» требуется истинное возвращение, чтобы можно было выполнить диагностику при загрузке. Да, его истинные модули MOST заканчиваются на '1;', но не для всех, включая OP, см. Его/ее комментарий для меня. –

+0

1; в последней строке - обеспечить возврат true. Если добавить 1; в этом случае, при возникновении другой ошибки, не следует вести себя так, как предлагал преподаватель. – Weiyan

-1

Примечание: а perldoc комментарий может предотвратить вызов программы из -reading-a .pm - даже с окончанием 1;

Удалить блок комментариев - oila. Добавьте его - программа не вернула истинное значение.

1; остается все равно!

Смежные вопросы