Darüberhinaus, würde ich die Gültigkeit eines Datums nicht so prüfen. Du solltest mit localtime und Time::localtime die Zahlen miteinander vergleichen. Dann kannst du wirklich feststellen ob das Datum ein gültiges Datum ist.
Das würde ich nicht, weil es ziemlich uneffizient ist, extra wegen der Überprüfung von 3 Zahlen, extra ein Modul zu importieren oder sonst irgendwie zusätzlichen Code schreiben.
Das ist Quatsch. Time::local ist ein kleines Modul und du unterschätzt die Schnelligkeit von Perl, ich halte es eher für uneffizient stundenlang rumzuprogrammieren und dann das falsche Ergebnis zu erhalten. es geht ja schließlich nicht um die Überprüfung von 3 Zahlen, sondern um die Überprüfung eines Datums was wesentlich komplexer ist.
Was machen deine Test bei:
31.4.2003 -> gültig?
29.2.2000 -> gültig?
29.2.2003 -> gültig?
das selber zu machen ist müßig und ineffizient.
print checkDate(29,2, 2000) ? 'gültig' : 'nicht gültig';
print "\n";
print checkDate(29,2, 2001) ? 'gültig' : 'nicht gültig';
print "\n";
sub checkDate
{
my($t, $m, $j) = @_;
use Time::Local;
$m--;
my $check = timelocal(0, 0, 0, $t, $m, $j);
my ($t1, $m2, $j2) = (localtime($check))[3..5];
$j2 += 1900 if($j2 < 1900);
return ($t == $t1 && $m == $m2 && $j == $j2);
}
so geht's.
Struppi.