Code Vereinfachen in Methoden einer Factory

Methoden die nicht ständig benötigt werden, liegen ausgelagert in eigenen Dateien

Betrachte in untenstehender Methode insbesondere die Ausgabe des Response-Header Content-Type und die letzte Anweisung. Zum Einen kann der Content-Type Header hier gesetzt werden, weil ein anderer, davon abweichender Header ohnehin nicht in Frage kommt. Zum Anderen kommt für den Ausgabepuffer ohnehin nur das Attribut $self->{CONTENT} in Frage, so dass diese Zuweisung ebenfalls gleich hier stattfinden kann. Und drittens bestimmt die letzte Anweisung in einer Funktion ohnehin den Return-Value, falls dieser anderweitig genutzt werden sollte. Mit dem Auslagern einer Methode in eine dedizierte Datei ergibt sich auch die Möglichkeit, das Template zweckmäßig gleich mit unterzubringen unterhalb des __DATA__ Token. Somit gestaltet sich die Ausgabe eines XML-Sitemap recht einfach dadurch, dass nur noch eine einzige Methode aufgerufen werden muss. use strict; use warnings; *sitemap = sub{ my $self = shift; my $urls = shift || $self->{BIN}; my $body = do{ local $/ = undef; <DATA>; }; $self->nocache; $self->header('Content-Type' => 'application/xml; charset=UTF-8'); my @urls = (); foreach my $u( keys %$urls ){ next if $u eq 'default'; next if $self->{BIN}{$u}{no_sitemap}; push @urls, { server => $ENV{SERVER_NAME}, u => $u }; } $self->{CONTENT} = XR::xr($body, {urls => \@urls}); }; 1; __DATA__ <?xml version='1.0' encoding='UTF-8'?> <urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'> %loop_urls% <url> <loc>http://%server%%u%</loc> </url> %endloop% </urlset>

Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. s​os­@rolf­rost.de.