<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tobi&#039;s Blog &#187; Perl</title>
	<atom:link href="http://www.fukurama.org/wordpress/category/technik/perl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fukurama.org/wordpress</link>
	<description></description>
	<lastBuildDate>Tue, 17 Jan 2012 20:23:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>RFC konforme E-Mail-Header</title>
		<link>http://www.fukurama.org/wordpress/2008/11/13/rfc-konforme-e-mail-header/</link>
		<comments>http://www.fukurama.org/wordpress/2008/11/13/rfc-konforme-e-mail-header/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 16:23:36 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[1522]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[internationalisierung]]></category>
		<category><![CDATA[quote]]></category>
		<category><![CDATA[rfc]]></category>

		<guid isPermaLink="false">http://www.fukurama.org/wordpress/?p=282</guid>
		<description><![CDATA[Wie schon bei den Problemen mit UTF-8 E-Mails berichtet, gibt es eine Spezifikation, wie ein Mail-Header zu kodieren ist. Und als Header zählt auch der Betreff. Laut dieser Vorgabe (RFC 1522) dürfen in E-Mail-Headern nur die ersten 127 Zeichen des ASCII-Zeichensatzes benutzt werden. Quasi nur alphanumerische Zeichen und eine Hand voll Sonderzeichen. Also auf keinen [...]]]></description>
			<content:encoded><![CDATA[<p>Wie schon bei den <a href="/wordpress/2005/11/14/utf-8-e-mails/">Problemen mit UTF-8 E-Mails</a> berichtet, gibt es eine Spezifikation, wie ein Mail-Header zu kodieren ist. Und als Header zählt auch der Betreff.</p>
<p>Laut dieser Vorgabe (RFC 1522) dürfen in E-Mail-Headern nur die ersten 127 Zeichen des ASCII-Zeichensatzes benutzt werden. Quasi nur alphanumerische Zeichen und eine Hand voll Sonderzeichen. Also auf keinen Fall Umlaute oder ähnliches.</p>
<p>Wenn man zum Versenden z.B. das Perl-CPAN-Modul <a href="http://search.cpan.org/~rjbs/MIME-Lite/lib/MIME/Lite.pm">MIME::Lite</a> benutzt, werden die nicht erlaubten Zeichen nicht automatisch konvertiert. Da muss man sich selber kümmern.</p>
<p>Am leichtesten geht es mit dem Perl-CPAN-Modul <a href="http://search.cpan.org/~nezumi/MIME-EncWords/EncWords.pm">MIME::EncWords</a>. Die Funktion <strong>MIME::EncWords::encode_mimewords(STRING) : QUOTED_STRING</strong> macht eben genau diese Konvertierung, wobei es interessanter weise den aktuellen Zeichensatz erraten kann. Diesen Teil werde ich noch mal genauer unter die Lupe nehmen, da es schon <a href="/wordpress/2005/11/14/zeichensatzdetektor/">länger auf meiner Liste steht</a>.</p>
<p>Wie oben schon erwähnt, kann und sollte man alle E-Mail-Header quoten. Die Funktion ändert im übrigen den übergebenen String nur, wenn es wirklich nötig ist. Reine Ascii-Inhalte, die unterhalb der 127 Zeichens liegen, werden so belassen wie sie sind. Den E-Mail-Inhalt sollte man aber nicht damit übersetzen lassen. Das funktioniert zwar auch soweit, aber die Zeilenumbrüche sind bei mir dabei verloren gegangen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fukurama.org/wordpress/2008/11/13/rfc-konforme-e-mail-header/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stolperfallen in Perl&#8217;s Spezialmethoden: DESTROY</title>
		<link>http://www.fukurama.org/wordpress/2008/07/15/stolperfallen-in-perls-spezialmethoden-destroy/</link>
		<comments>http://www.fukurama.org/wordpress/2008/07/15/stolperfallen-in-perls-spezialmethoden-destroy/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 22:16:05 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Perl::Kinky]]></category>
		<category><![CDATA[destroy]]></category>
		<category><![CDATA[eval]]></category>

		<guid isPermaLink="false">http://www.fukurama.org/wordpress/?p=203</guid>
		<description><![CDATA[Durch einen Kollegen bin ich auf ein Problem aufmerksam geworden, was ein verwirrendes Verhalten von globalen Variablen in Verbindung mit DESTROY beschreibt. Man nehme folgenden Code und betrachte speziell den unteren eval-Block: use Test::More tests => 1; { package Foo; sub new { bless([]) } sub DESTROY { eval { die('destroy'); } } sub bar [...]]]></description>
			<content:encoded><![CDATA[<p>Durch einen Kollegen bin ich auf ein Problem aufmerksam geworden, was ein <a href="http://rt.perl.org/rt3/Public/Bug/Display.html?id=38034">verwirrendes Verhalten von globalen Variablen in Verbindung mit DESTROY</a> beschreibt. Man nehme folgenden Code und betrachte speziell den unteren eval-Block:</p>
<p><code>use Test::More tests => 1;<br />
{<br />
	package Foo;<br />
	sub new {<br />
		bless([])<br />
	}<br />
	sub DESTROY {<br />
		eval {<br />
			die('destroy');<br />
		}<br />
	}<br />
	sub bar {<br />
		die('bar');<br />
	}<br />
}<br />
eval {<br />
	my $foo = Foo->new();<br />
	$foo->bar();<br />
};<br />
main::diag($@);</code></p>
<p>in $@ sollte eigentlich sowas wie <em>bar at Test.pm line x</em> erscheinen, aber er ergibt <em>destroy at&#8230;</em>. Was ist also passiert? Es ist, wie in der &#8220;Fehlerbeschreibung&#8221; erwähnt eigentlich kein Fehler, sondern eine Nebenwirkung davon, dass in Perl fast alles mit globalen Variablen gelöst wird. Wenn man den Code ein wenig erweitert, sieht man deutlich, was passiert:</p>
<p><code>#!perl -T<br />
use Test::More tests => 1;<br />
{<br />
	package Foo;<br />
	sub new {<br />
		main::diag('new() called');<br />
		bless([])<br />
	}<br />
	sub DESTROY {<br />
		main::diag('DESTROY() called');<br />
		eval {<br />
			die('destroy');<br />
		}<br />
	}<br />
	sub bar {<br />
		main::diag('bar() called');<br />
		die('bar');<br />
	}<br />
}<br />
main::diag('eval-START');<br />
eval {<br />
	my $foo = Foo->new();<br />
	$foo->bar();<br />
}; # HERE!<br />
main::diag('eval-END');<br />
like($@, qr/^destroy/, 'croak in DESTROY()');</code></p>
<p>Folgende Ausgabe wird erzeugt:<br />
<code># eval-START<br />
# new() called<br />
# bar() called<br />
# DESTROY() called<br />
# eval-END</code><br />
Zwischen dem Aufruf von <strong>bar()</strong> und <strong>eval-end</strong> mogelt sich das <strong>DESTROY</strong> frech dazwischen. Es gibt hier eine Nebenläufigkeit, da $foo am Ende des Eval-Blockes nicht mehr existiert und der GarbadgeCollector artig DESTROY() auf das Objekt aufruft. Da es aber nur eine Kopie von $@ gibt, wird der Inhalt durch das DESTROY-eval{}  einfach überschrieben, denn das soll eval{} bei jedem Aufruf ja auch tun.</p>
<p>In der &#8220;Fehlerbeschreibung&#8221; ist als mögliche Lösung angegeben, man soll immer <strong>local</strong> verwenden, um z.B. $@ nicht zu überschreiben. Um auf &#8220;Hat Fehler&#8221; zu prüfen würde ich lieber ein<br />
<code>my $ok = eval {<br />
  #...some code<br />
  return 1;<br />
};</code><br />
verwenden, da man da erst gar nicht auf $@ angewiesen ist. Der Inhalt von $@ wird damit aber immer noch überschrieben werden.</p>
<p>Dieses Verhalten hat mir mal wieder gezeigt, dass mit allen Spezialmethoden von Perl, also import(), BEGIN, CHECK, END, INIT, DESTROY() und alle anderen, die zu bestimmten Ereignissen aufgerufen werden, immer sehr umsichtig umgegagnen werden muss. Am besten viele Diagnosemeldungen ausgeben lassen, damit man nicht den Überblick verliert.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fukurama.org/wordpress/2008/07/15/stolperfallen-in-perls-spezialmethoden-destroy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ändern und mehrfaches Installieren von Perl-Modulen</title>
		<link>http://www.fukurama.org/wordpress/2008/05/14/andern-und-mehrfaches-installieren-von-perl-modulen/</link>
		<comments>http://www.fukurama.org/wordpress/2008/05/14/andern-und-mehrfaches-installieren-von-perl-modulen/#comments</comments>
		<pubDate>Wed, 14 May 2008 07:55:34 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[make]]></category>

		<guid isPermaLink="false">http://www.fukurama.org/wordpress/?p=194</guid>
		<description><![CDATA[Wenn man aus einem Perl-Modul per perl Makefile.PL;make;make install das Modul installiert, dann den Quellcode ändert und es nochmal installieren will, MUSS man make clean ausführen oder die vom Makefile angelegten Daten selber löschen. Ansonsten wird immer wieder das &#8220;alte&#8221; installiert. Ich hab gerade ein paar Minuten damit zugebracht, ein Modul zu aktualisieren und hatte [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man aus einem Perl-Modul per <code>perl Makefile.PL;make;make install</code> das Modul installiert, dann den Quellcode ändert und es nochmal installieren will, MUSS man <code>make clean</code> ausführen oder die vom Makefile angelegten Daten selber löschen. Ansonsten wird immer wieder das &#8220;alte&#8221; installiert.</p>
<p>Ich hab gerade ein paar Minuten damit zugebracht, ein Modul zu aktualisieren und hatte mich gewundert, warum meine Änderungen keine Wirkung hatten.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fukurama.org/wordpress/2008/05/14/andern-und-mehrfaches-installieren-von-perl-modulen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vorhandensein von Methoden in Klassen prüfen</title>
		<link>http://www.fukurama.org/wordpress/2008/04/17/vorandensein-von-methoden-in-klassen-prufen/</link>
		<comments>http://www.fukurama.org/wordpress/2008/04/17/vorandensein-von-methoden-in-klassen-prufen/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 19:48:12 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Perl::Kinky]]></category>
		<category><![CDATA[subroutine]]></category>
		<category><![CDATA[symboltable]]></category>

		<guid isPermaLink="false">http://www.fukurama.org/wordpress/?p=189</guid>
		<description><![CDATA[Wenn man wissen will, ob eine Methode in einer Klasse nur deklariert (sub method;) oder ob eben auch ein Methodenkörper existiert (sub method { die 1; }) sollte man sich nicht nur auf can() verlassen. sub existing_sub; sub defined sub { die 1; } print __PACKAGE__->can('notexisting_sub'); #false print exists(&#038;notexisting_sub); # false print defined(&#038;notexisting_sub); # false [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man wissen will, ob eine Methode in einer Klasse nur deklariert (<em>sub method;</em>) oder ob eben auch ein Methodenkörper existiert (<em>sub method { die 1; }</em>) sollte man sich nicht nur auf can() verlassen.</p>
<p><code>sub existing_sub;<br />
sub defined sub { die 1; }<br />
print __PACKAGE__->can('notexisting_sub'); #false<br />
print exists(&#038;notexisting_sub); # false<br />
print defined(&#038;notexisting_sub); # false<br />
print __PACKAGE__->can('existing_sub'); #true<br />
print exists(&#038;existing_sub); # true<br />
print defined(&#038;existing_sub); # false<br />
print __PACKAGE__->can('defined_sub'); #true<br />
print exists(&#038;defined_sub); # true<br />
print defined(&#038;defined_sub); # true</code></p>
<p>Der Aufruf einer Methode, die nur deklariert, führt zu einem &#8220;<strong>Undefined subroutine .. called</strong>&#8221; fehler, den man ja eigentlich mit dem can() verhindern wollte. Mir ist noch nie eine solche, blanke Deklaration über den Weg gelaufen, aber man weiß ja nie.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fukurama.org/wordpress/2008/04/17/vorandensein-von-methoden-in-klassen-prufen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Anti-Patterns</title>
		<link>http://www.fukurama.org/wordpress/2008/04/16/anti-patterns/</link>
		<comments>http://www.fukurama.org/wordpress/2008/04/16/anti-patterns/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 21:32:09 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.fukurama.org/wordpress/?p=188</guid>
		<description><![CDATA[Design-Patterns in der Software-Entwicklung sind mir schon eine Weile bekannt und das es so etwas wie Anti-Patterns gibt, hab ich auch mal gehört. Aber dass die auch so detailiert beschrieben sind, war mit neu. In diese Anti-Pattern Wikipedia-Artikel ist das wunderbar beschrieben. Diese Anti-Patterns gibt es im übrigen auch für andere Bereiche, nicht nur die [...]]]></description>
			<content:encoded><![CDATA[<p>Design-Patterns in der Software-Entwicklung sind mir schon eine Weile bekannt und das es so etwas wie Anti-Patterns gibt, hab ich auch mal gehört. Aber dass die auch so detailiert beschrieben sind, war mit neu. In diese <a href="http://de.wikipedia.org/wiki/Anti-Pattern">Anti-Pattern Wikipedia-Artikel</a> ist das wunderbar beschrieben. Diese Anti-Patterns gibt es im übrigen auch für andere Bereiche, nicht nur die Entwicklung selbst.</p>
<p>Einiges kommt, zumindest mir, bekannt vor. Speghetti-Code, Gott-Objekt und die Spinnen sehr ich schon sehr oft. Höchste Zeit, das zu ändern. <img src='http://www.fukurama.org/wordpress/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.fukurama.org/wordpress/2008/04/16/anti-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Merkwürdigkeiten beim Taint-Mode in Perl</title>
		<link>http://www.fukurama.org/wordpress/2008/04/16/merkwurdigkeiten-beim-taint-mode-in-perl/</link>
		<comments>http://www.fukurama.org/wordpress/2008/04/16/merkwurdigkeiten-beim-taint-mode-in-perl/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 20:27:04 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[taint]]></category>

		<guid isPermaLink="false">http://www.fukurama.org/wordpress/?p=187</guid>
		<description><![CDATA[Schreibt man einen CPAN-Modul-Test kommt man um den Taint-Modus nicht herum. Normalerweise ist der auch nicht das Problem, allerdings ist heute ein Test auf einem Gentoo-System fehlgeschlagen und es ergibt absolut keinen Sinn. In den bemängelten Zeilen steht lediglich use base &#8216;KLASSENNAME&#8217;;. Heißt das jetzt, dass &#8220;base&#8221; unsicher ist? Ja, es ist mit dem bösen [...]]]></description>
			<content:encoded><![CDATA[<p>Schreibt man einen CPAN-Modul-Test kommt man um den Taint-Modus nicht herum. Normalerweise ist der auch nicht das Problem, allerdings ist heute ein Test auf einem <a href="http://www.nntp.perl.org/group/perl.cpan.testers/2008/04/msg1325639.html">Gentoo-System fehlgeschlagen</a> und es ergibt absolut keinen Sinn.</p>
<p>In den bemängelten Zeilen steht lediglich <strong>use base &#8216;KLASSENNAME&#8217;;</strong>. Heißt das jetzt, dass &#8220;base&#8221; unsicher ist? Ja, es ist mit dem bösen &#8220;fields&#8221; fest verdrahtet, aber was genau soll jetzt hier falsch sein?</p>
<p>Es ist vor allem merkwürdig, dass die Tests auf 50 Systemen problemlos durchgelaufen sind und dieses eine Meckert.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fukurama.org/wordpress/2008/04/16/merkwurdigkeiten-beim-taint-mode-in-perl/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Perl und Overflow die zweite</title>
		<link>http://www.fukurama.org/wordpress/2008/03/22/perl-und-overflow-die-zweite/</link>
		<comments>http://www.fukurama.org/wordpress/2008/03/22/perl-und-overflow-die-zweite/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 20:10:37 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[overflow]]></category>

		<guid isPermaLink="false">http://www.fukurama.org/wordpress/?p=179</guid>
		<description><![CDATA[Ich habe weiter ein wenig rumgesucht und immerhin eine brauchbare Variante zum Finden der Systemeigenen Inf-Markierung gefunden. my $overfloating_float = 0; my $overfloating_float_string = ''; m< $i = 98; while($i++) { $overfloating_float = '1.2e+' . $i; my $result = ($overfloating_float * 1) - $overfloating_float; if($result ne '0') { print "Overflow substraction result: $result, Overflow: " [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe weiter ein wenig rumgesucht und immerhin eine brauchbare Variante zum Finden der Systemeigenen Inf-Markierung gefunden.<br />
<code>my $overfloating_float = 0;<br />
my $overfloating_float_string = '';<br />
m< $i = 98;<br />
while($i++) {<br />
	$overfloating_float = '1.2e+' . $i;<br />
	my $result = ($overfloating_float * 1) - $overfloating_float;<br />
	if($result ne '0') {<br />
		print "Overflow substraction result: $result, Overflow: " . ($overfloating_float * 1);<br />
		$overfloating_float_string = '9' x $i;<br />
		last;<br />
	}<br />
	last if($i > 1_000_000_000);<br />
}<br />
print "Overfloat at: ".($overfloating_float_string * 1)</code></p>
<p>Die Variable $overfloating_float_string ist eigentlich nicht korrekt erzeugt worden aber das ist hier gar nicht das Problem. Bei den meisten Testsystemen für Fukurama::Class ging alles gut, bis auf bei diesen dreien:</p>
<p><a href="http://www.nntp.perl.org/group/perl.cpan.testers/2008/03/msg1188282.html">i686-linux-thread-multi-64int-ld2.6.21.5-smp</a><br />
<a href="http://www.nntp.perl.org/group/perl.cpan.testers/2008/03/msg1184640.html">i686-linux-thread-multi-64int-ld2.6.21.5-smp</a><br />
<a href="http://www.nntp.perl.org/group/perl.cpan.testers/2008/03/msg1176570.html">x86_64-linux-thread-multi-ld 2.6.22.10</a></p>
<p>Dort ergab sich ein die Fehlerhafte Ausgabe: <strong>Overfloat at: 9.99999999999999997e+4931</strong> Ich weiß ja, dass es bei Fließkommaberechnungen Ungenauigkeiten gibt, aber die Art war mir neu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fukurama.org/wordpress/2008/03/22/perl-und-overflow-die-zweite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schlechte CPAN-Module (Teil 2): CGI</title>
		<link>http://www.fukurama.org/wordpress/2008/03/14/schlechte-cpan-module-teil-2-cgi/</link>
		<comments>http://www.fukurama.org/wordpress/2008/03/14/schlechte-cpan-module-teil-2-cgi/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 18:36:14 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Perl::Kinky]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[cpan]]></category>

		<guid isPermaLink="false">http://www.fukurama.org/wordpress/?p=176</guid>
		<description><![CDATA[Module, die sich als Eierlegende-Wollmilch-Sau geben, haben oft ein Problem: sie können zu viel und irgendwie nichts richtig. Das Gefühl hab ich beim CGI-Modul schon lange. Und heute wurde es auch bewiesen. Ich habe mir leider nie die Mühe gemacht in die CPAN-Bugliste vom CGI-Modul zu sehen. Hätte ich&#8217;s man bloß getan. Insgesamt sind derzeit [...]]]></description>
			<content:encoded><![CDATA[<p>Module, die sich als Eierlegende-Wollmilch-Sau geben, haben oft ein Problem: sie können zu viel und irgendwie nichts richtig. Das Gefühl hab ich beim CGI-Modul schon lange. Und heute wurde es auch bewiesen. Ich habe mir leider nie die Mühe gemacht in die CPAN-Bugliste vom CGI-Modul zu sehen. Hätte ich&#8217;s man bloß getan.</p>
<p>Insgesamt sind derzeit 115 Fehler gemeldet, einige davon schon seit Jahren. Live erlebt habe ich den folgenden <a href="http://rt.cpan.org/Public/Bug/Display.html?id=31648">Fehler in der url() Methode</a>. Ungequotet wird der Scriptname in eien Regex gesetzt. Unter mod_perl ist dummerweise der Scriptname der gesamte Pfad. Ein <strong>[</strong> im Pfad der URL führt zu einem Laufzeitfehler, wenn man diese Funktion in der Anwendung benutzt.</p>
<p>Ende vom Lied: ich werde mich wohl mal nach einer Alternative umsehen, die sich AUSSCHLIEßLICH um die Entgegenname von Parametern kümmert und noch ein zweites für die Ausgabe von HTTP-Headern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fukurama.org/wordpress/2008/03/14/schlechte-cpan-module-teil-2-cgi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Schlechte CPAN-Module</title>
		<link>http://www.fukurama.org/wordpress/2008/03/12/schlechte-cpan-module/</link>
		<comments>http://www.fukurama.org/wordpress/2008/03/12/schlechte-cpan-module/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 21:09:01 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[encoding]]></category>

		<guid isPermaLink="false">http://www.fukurama.org/wordpress/?p=175</guid>
		<description><![CDATA[Heute ist mir mal wieder (schmerzhaft) klar gemacht worden, dass es viel Mist im CPAN gibt. Man tendiert halt auch sehr leicht dazu, ein fertiges Modul einfach zu benutzen. Wenig Arbeit, schnelle Ergebnisse. Aber das geht eigentlich immer schief. Die Frage ist nur, wie schlimm die Fehler sind. Mein konkretes Beispiel: das Modul HTML::Tidy, was [...]]]></description>
			<content:encoded><![CDATA[<p>Heute ist mir mal wieder (schmerzhaft) klar gemacht worden, dass es viel Mist im CPAN gibt. Man tendiert halt auch sehr leicht dazu, ein fertiges Modul einfach zu benutzen. Wenig Arbeit, schnelle Ergebnisse. Aber das geht eigentlich immer schief. Die Frage ist nur, wie schlimm die Fehler sind.</p>
<p>Mein konkretes Beispiel: das Modul HTML::Tidy, was auch in anderen Modulen öfter verwendet wird, ist ein wenig Bug-verseucht. Das ist mir leider erst NACH dem Produktiveinsatz aufgefallen. Das Encoding wird von ISO nach UTF oder anders herum durchgeführt, ohne dass man das mitgeteilt bekommt. Am Ende hatte ich hunderte schadhafte Datenbankeintragungen <img src='http://www.fukurama.org/wordpress/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Fazit: wenn man ein CPAN-Modul benutzen will, sollte man die Bugs, die Anzahl der durchgefallenen Tests, die Bewertung und den Quellcode ganz genau betrachten. Dumm ist nur, dass einige Module so viele Abhängigkeiten haben. Da ist eine komplette Prüfung &#8216;ne ziemliche Sysiphos-Arbeit. Aber man sonnte sich die Arbeit machen. Immer!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fukurama.org/wordpress/2008/03/12/schlechte-cpan-module/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unterschiede von Perl auf verschiedenen Systemen</title>
		<link>http://www.fukurama.org/wordpress/2008/01/28/unterschiede-von-perl-auf-verschiedenen-systemen/</link>
		<comments>http://www.fukurama.org/wordpress/2008/01/28/unterschiede-von-perl-auf-verschiedenen-systemen/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 19:38:29 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Perl::Kinky]]></category>

		<guid isPermaLink="false">http://www.fukurama.org/wordpress/?p=123</guid>
		<description><![CDATA[Bei den CPAN-Tests für das Fukurama::Class Modul sind mir zwei Dinge aufgefallen, die auf unterschiedlichen Systemen unterschiedlich von Perl behandelt werden: 1. Zahlenüberläufe werden unterschiedlich markiert. Ich kenne inf, Solaris z.B. benutzt aber Infinity und einige andere hatten noch ein Inf am Start (großgeschrieben). Das fällt nie auf, auer man behandelt genau diese Überläufe. 2. [...]]]></description>
			<content:encoded><![CDATA[<p>Bei den CPAN-Tests für das Fukurama::Class Modul sind mir zwei Dinge aufgefallen, die auf unterschiedlichen Systemen unterschiedlich von Perl behandelt werden:</p>
<p>1. Zahlenüberläufe werden unterschiedlich markiert. Ich kenne <strong>inf</strong>, Solaris z.B. benutzt aber <strong>Infinity</strong> und einige andere hatten noch ein <strong>Inf</strong> am Start (großgeschrieben). Das fällt nie auf, auer man behandelt genau diese Überläufe.</p>
<p>2. Klassennamen können nicht immer als Parameter übergeben werden. Ich hatte im Test ein <strong>$obj->param(My::Class)</strong> verwendet. Das schlug aber komplett fehl. Ich musste es als String übergeben ala <strong>$obj->param(&#8216;My::Class&#8217;)</strong>. Nicht weiter tragisch, sofern man es denn weiß. PS: Für __PACKAGE__ gilt das natürlich auch.</p>
<p><ins datetime="2008-03-23T18:30:00+00:00">Soeben ist ein <a href="http://www.nntp.perl.org/group/perl.cpan.testers/2008/03/msg1206096.html">CPAN-Tester mit einer Windows-Gurke</a> über meine Tests gelaufen. Ich weiß, daß in Visual-Basic z.B. die Boolische Werte in der Landessprache geschrieben werden können. Wie z.B. &#8220;true&#8221;, &#8220;wahr&#8221; oder &#8220;vrai&#8221;. Bei Perl haben sie sich auch Mühe gegeben: <strong>-1.#IND</strong> für NaN und <strong>1.#INF</strong> für Inf. Toll!</p>
<p>In dem Modul erzwinge ich jetzt einen Überlauf und suche mir halt die Systemeigenen Werte. Hmpfrl!</ins></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fukurama.org/wordpress/2008/01/28/unterschiede-von-perl-auf-verschiedenen-systemen/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

