尝试运行简单的mojolicious程序时出错

时间:2014-04-13 23:15:45

标签: perl mojolicious

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.pl
use 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;

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__