使用Mojolicious桥时的深度递归

时间:2012-08-21 13:08:45

标签: perl mojolicious

我定义了一个Mojolicious桥梁

my $foo = $route->bridge('/')->to(cb => sub {
    my $self = shift;
    return 1;
});
return $foo;

我正在定义这样的路线

$foo->route('/')->to(
    module      => 'test',
    controller  => 'test',
    action      => 'test'
);

$foo->route('/login')->to(
    module      => 'test1',
    controller  => 'test1',
    action      => 'test1'
);

启动应用后,会收到错误消息 子程序“Mojolicious :: Routes :: Route :: AUTOLOAD”在/usr/local/share/perl5/Mojolicious/Routes/Route.pm第23行进行深度递归。

我不知道这里发生了什么。任何人都可以帮助我。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以做的一件事就是重新定义AUTOLOAD子以捕获跟踪,如下所示:

{   no warnings 'redefine';
    my $old_autoload = *Mojolicious::Routes::Route::AUTOLOAD{CODE};
    *Mojolicious::Routes::Route = sub { 
        Carp::cluck( "Trace from $Mojolicious::Routes::Route::AUTOLOAD\n - " );
        goto &$old_autoload;
    };
}

这至少会为您提供问题的名称和路径。你也可以在那里放一些递归跟踪,虽然它可能需要弄乱goto留下的小占用空间。