Mojolicious的新手。我有两个文件,test1.pl和test2.pm,试图在我的电脑上运行它时出错(Ubuntu 12.04)。
$ morbo test1.pl
Couldn't load application from file "test1.pl": Can't call method "render" on an undefined value at test2.pm line 11.
有什么想法吗?感谢。
以下是两个文件
######### test1.pluse Mojolicious::Lite;
no warnings;
use test2;
get '/' => test2::sendMainPage;
######### test2.pm
package test2;
use Mojolicious::Lite;
use URI::Escape;
use HTML::Entities;
use Data::Dumper;
use JSON;
use Exporter 'import';
sub sendMainPage {
my $self = shift;
$self->render(text => q|<html><body>
<h1>Welcome to test demo page</h1>
</body></html>|);
}
1;
答案 0 :(得分:8)
在设置路线时,您需要传递对子的引用:
use Mojolicious::Lite;
no warnings;
use test2;
get '/' => \&test2::sendMainPage;
否则,你实际上是在没有参数的情况下调用sub,因而是错误。
另外,不要这样做no warnings;
。在您制作的每个脚本脚本的顶部添加use strict;
和use warnings;
。默认情况下Mojolicious::Lite
打开这些编译指示的原因有很多。
如果您已经这样做了,那么您会收到此警告,该警告会提醒您注意该问题:
Bareword "test2::sendMainPage" not allowed while "strict subs" in use at test1.pl line 5.
最后,始终将您的包名称大写。 Test2
代替&{39; test2
。来自perlstyle
Perl非正式地保留&#34; pragma&#34;的小写模块名称。整数和严格的模块。其他模块应以大写字母开头并使用大小写混合,但由于原始文件系统的限制,可能没有下划线。模块名称的表示形式为必须适合几个稀疏字节的文件。
最终工作代码:
test1.pl
use strict;
use warnings;
use Mojolicious::Lite;
use Test2;
get '/' => \&Test2::sendMainPage;
app->start;
__DATA__
Test2.pm
package Test2;
use strict;
use warnings;
sub sendMainPage {
my $self = shift;
$self->render(text => q|<html><body>
<h1>Welcome to test demo page</h1>
</body></html>|);
}
1;
__DATA__