begann ich einige Perl-Code abschreiben Catalyst, die wie folgt aussah:
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);
}
Dann dachte ich. o O (? Warum Pass $ c um die ganze Zeit), und ich änderte dazu:
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;
}
Es gibt nur einen Einstieg in die Handler ist, so $ self-> c immer richtig eingestellt werden.
Meine Kollegen sagten, wenn Catalyst so verwendet werden sollte, dann würden alle es so benutzen. Sie befürchteten, dass dies zu einem Speicherverlust führen würde, da der Verweis auf $ c nach dem Ende der Anfrage bestehen bleiben würde. Ist das wahr?