Moin!
Da komme ich gerne zurück auf Deine Aussage, dass sich ein Perl-Programmierer um jeden Scheis selber kümmern muss, gerade das ist nämlich in Perl ganz einfach, guck:
Controller, dem URL http://example.com/admintools.html zugeordnet
sub admintools{
my $self = shift;
die "Nicht angemeldet!\n" if $self->{LOGIN_GROUP} ne $self->{REQUIRED_GROUP};
}
>
> Dahinter steckt Perl's Exception-Model: Ich werfe in der Methode eine Exception, die ich später auffange, um mit der eigens notierten Meldung eine klar verständliche Fehlerseite ausgeben zu können (beachte das \n am Ende der Meldung, das unterdrückt den Backtrace, weil diese Meldung für den Besucher bestimmt ist und nicht für den Programmierer).
Ich sehe nicht, dass da irgendwas geworfen oder gefangen wird.
> Aber das ist nicht alles. Perl gibt mit dem Modul 'UNIVERSAL' dem Programmierer die Möglichkeit, abzufragen, ob es in der Klasse eine bestimmte Methode gibt:
>
> ~~~perl
> my $code = $self->can('admintools');
>
Kann Perl keine Interfaces und keine typisierten Parameter?
In PHP geht sowas nämlich ohne dumme Prüfung:
function (Admintools_Interface $admintools) {
$admintools->makeSomeAdminStuff();
}
Aber natürlich kann man auch manuell prüfen:
if (method_exists($admintools, 'makeSomeAdminStuff')) { /*...*/ }
Habe ich den $code, kann ich den ausführen und dabei auf Exceptions testen:
eval{$self->$code};
"eval is evil!"
- Sven Rautenberg