Richard Voß: Funktion "deprecated" nach Perl-Update auf Server?

Beitrag lesen

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