also wenn $dbh->errstr() ausgegeben wird, muss auch "Zeile: $line " ausgegeben werden. Kann es sein, dass da an einer anderen Stelle ein Fehler auftritt, wo kein die "Zeile: $line " . $dbh->errstr() steht?
Nebenbei: das || wird folgendermaszen ausgewertet:
my $sth = ( $dbh->prepare($cmd) || die "Zeile: $line" . $dbh->errstr );
Beim
die bleibt es sich egal, aber wenn du da sonst was machen willst, wird da bei einem Fehler der rechte Teil des ||-Ausdruckes an $sth ueberwiesen. Wenn du da anstelle von die print schreibst, bekommst du einen schoenen Fehler... Mit
or anstelle von
|| umgehst du dieses potentielle Problem.
ich verwende
or die so gut wie nie, sondern lieber eine syntax wie die folgende:
my $sth = $dbh->prepare($cmd);
unless ($sth) {
die "Zeile: $line" . $dbh->errstr();
}
else {
# ...
}
weil ich dann einfach das
die durch eine vernuenftige Fehlerausgabe ersetzen kann (z.B. &WriteHtmlError($r, $dbh, $errorMessage) oder so), was gerade bei CGI- und mod_perl-Scripten sehr wichtig sein kann, weil da ein 500er-Fehler selten einen guten Eindruck hinterlaesst.