我开始使用 Catalyst 编写一些 Perl 代码,如下所示:
package My::Controller;
extends 'Catalyst::Controller';
sub handler :Path :Args(0) :Location( some/url )
my ($self, $c) = @_;
$self->do_something_with_arguments($c);
$self->make_a_decision($c);
$self->another_method($c);
}
然后我想。o O(为什么总是传递 $c ?),我改为:
package My::Controller;
extends 'Catalyst::Controller';
has c => (is => "rw", isa => "Catalyst");
sub handler :Path :Args(0) :Location( some/url )
my ($self, $c) = @_;
$self->c($c);
$self->do_something_with_arguments;
$self->make_a_decision;
$self->another_method;
}
处理程序只有一个入口点,因此 $self->c 将始终正确设置。
我的同事说,如果这就是 Catalyst 的用途,那么,每个人都会这样使用它。他们担心这样做会导致内存泄漏,因为对 $c 的引用会在请求结束后持续存在。真的吗?