Ich wollte keineswegs das Rad neu erfinden, aber nachdem ich festgestellt habe, dass Date::Calc immer noch nicht zur Standarddistribution gehört (auch nicht bei Perl 5.10), kam mir der Gedanke, dass einige Provider es u.U. nicht installiert haben (bei meinem ist es zwar installiert, aber wer weiß, wie's beim Nachbarn aussieht...).
Wie du gemerkt hast gibt es eine reine Perl Version, die sich überall einfach installieren läßt, wenn der Hoster sich weigert dieses zu installieren, wofür es aber keinen Grund gäbe, sondern das wäre eher Grund den Hoster zu wechseln. Wenn dieser Perl anbietet, sollte das installieren von CPAN Modulen zum Angebotsumfang gehören.
Und deswegen gibt's heute Nudeln und k***** ist erlaubt ;) Also her mit der Tomatensauce!
Was mir zuerst auffällt, du nennst das Modul Date::Today, das package aber nur Today, es müßte auch Date::Today heißen.
Als nächstes, warum definierst du die Variabeln mit our?
Dann brauchst du kein HASH für die Wochentag und Monatsnamen, da reichen einfach Arrays.
Das mit den Großbuchstaben ist zwar in Date::Calc auch so, es ist aber nicht die übliche Praxis. Ich verwende für Funktionen immer Kleinbuchstaben, Funktionen mit Großbuchstaben wären Konstruktorfunktionen, die man aber üblicherweise nicht braucht in Perl, sondern dort sind es die package Namen. Aber das sind nur Konventionen, die viele anders handhaben.
Und da du nicht mit Objekten arbeitest brauchst du die $today Parameter nie, d.h. du kannst sie wegschmeissen, entweder mit shift oder in dem du den wirklichen Parameter mit $_[1] abfragst.
Ich würde die Time Funktion z.b. so umsetzen:
sub xTime {
shift;
my $how = shift;
my $printf = !$how ? '%02d:%02d:%02d' :
$how eq 'short' ? '%02d:%02d' :
$how eq 'old' ? '%02d.%02d Uhr' : 'Fehler'
;
return sprintf $printf, $lhour, $lmin, $lsec;
}
Struppi.