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>


Anbieter: nmq​rstx-18­@yahoo.de, die Seite verwendet funktionsbedingt einen Session-Cookie und ist Bestandteil meines nach modernen Aspekten in Perl entwickelten Frameworks.