Guten Abend,
baue gerade mal wieder an einem Script. Folgender Schnipsel hat bis zur letzten Bastelstunde (vor etwa 1 Monat) noch funktioniert:
Da ist einiges im Unreinen
if(!defined @logentries) {
Du willst (hast du an anderer Stelle geschrieben) prüfen, ob @logentries Werte enthält. Was liefert ein array in skalarem Kontext? Richtig: Seine Länge. Ist ein Array leer, beträgt die Länge 0, was ein logisch falscher Wert ist, ergo:
if( not @logentries ){
oder einfach
unless( @logentries ){
siehe perldoc -f defined und perldoc perldata
print LOG "$newaddr|$current_time\n";
}
else {
foreach(@logentries) {
print "$_\n";
$_ =~ s/[\n\r]//g;
Siehe perldoc perlport. Dieser Ausdruck ist maSgW* falsch, denn du wllst \012 und \015 verwenden.
($ip, $time) = split(/|/, $_);
if ($ip eq $newaddr) {
flock(LOG,8);
close(LOG);
Nein, böse. Erstens willst du die Fcntl ':flock' Konstanten verwenden, damit dein Script wenigstens Portablität heuchelt, zweitens willst du nicht explizit unlocken, wenn du _direkt danach_ close() verwendest.
perldoc -f flock
my $msg = "Sie haben vor weniger als $timestamp Minuten bereits Ihr Feedback hinterlassen.";
error_win($msg);
}
}
Jetzt steht folgende Fehlermeldung in error.log:
"defined(@array) is deprecated at feedback.pl line 167.
(Maybe you should just omit the defined()?)"
Das ist schon _sehr_ lange der Fall. Du solltest dir mal eine aktuelle Perl-version zulegen, damit du solchen Dingen vorbeugen kannst. Aktuell ist 5.8.0 .
und der else-Zweig wird komplett ignoriert. Weiß jemand, was mir diese Fehlermeldung sagen will? Soweit ich bisher rauskriegen konnte, wurde auf dem Server vor kurzem die Perl-Version von 5.6.1 auf 5.8.0 geupdated.
"defined @array" ist auch schon mit 5.6.1 ungültig, vielleicht wurden aber jetzt endlich Warnungen forciert. Merke: Jedes Perl-Programm beginnt mit
#!/usr/bin/perl
use strict;
use warnings;
Wobei die erste Zeile variieren kann, je nachdem, wo perl liegt. Bei CGI-Programmen sollte sie etwa so aussehen:
#!/usr/bin/perl -T
HTH
* mit an Sicherheit grenzender Wahrscheinlichkeit