5

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 への参照がリクエストの終了後も保持されるため、この方法でメモリ リークが発生するのではないかと心配していました。本当?

4

1 に答える 1