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;
}
ハンドラへのエントリ ポイントは 1 つだけなので、$self->c は常に正しく設定されます。
私の同僚は、これが Catalyst の使用方法であるなら、まあ、誰もがそのように使用するだろうと言いました。$c への参照がリクエストの終了後も保持されるため、この方法でメモリ リークが発生するのではないかと心配していました。本当?