Michael Schröpl: perl -w *und* use CGI::Carp - geht das irgendwie sinnvoll?

Beitrag lesen

Liebe Leser,

ich habe ein Problem mit dem Perl-Interpreter. (Es tritt sowohl in meiner PC-Entwicklungsumgebung als auch auf dem Teamone-Server auf, scheint also irgendwie universeller Natur zu sein.)

Ich möchte gerne meine Perl-Skripts mit der Option "-w" laufen lassen, um Warnungen bei der Verwendung illegaler Konstrukte zu erhalten.
Ich möchte auch gerne meine CGI-Skripte unter Verwendung von
   use CGI::Carp qw(fatalsToBrowser);
laufen lassen, um Fehlermeldungen im Browser zu sehen (und nicht in irgend einer Protokolldatei auf dem Server, die für Normalsterbliche kaum zugreifbar ist).

Beides einzeln funktioniert prima. Beides zusammen führt dazu, daß sich der Perl-Interpreter anscheinend aufhängt - jedenfalls braucht der Prozeß dann länger, als der CGI-Timeout meines Servers. (*Das* ist der Effekt, der bei der Betatest-Version der Suchmaschine auftritt, wenn eine nicht-case-sensitive Suche durchgeführt wird - hallo, Uschi ...)

Konkret habe ich einen Hash mit Markierungen, in welchem Feld eines Indexeintrags gesucht wird. Werte in diesem Hash sind entweder "+" oder undefiniert.
Später greife ich auf diesen Hash zu, um zu prüfen, ob ich die zu durchsuchenden Daten in Kleinbuchstaben konvertieren muß:
  if ($Search_Areas {0} eq '+') { $IndexLine      = lc ($IndexLine);      }
  if ($Search_Areas {1} eq '+') { $DieseKategorie = lc ($DieseKategorie); }
  if ($Search_Areas {2} eq '+') { $DieserTitel    = lc ($DieserTitel);    }
  if ($Search_Areas {3} eq '+') { $DieserName     = lc ($DieserName);     }
  if ($Search_Areas {4} eq '+') { $DieserText     = lc ($DieserText);     }

Lasse ich das Skript ohne "-w" *oder* ohne CGI::Carp laufen, dann funktioniert das tadellos.

Schalte ich "perl -w" ein, dann stellt der Perl-Interpreter fest, daß einige der $Search_Area-Werte undefiniert sind und deshalb besser nicht mit '+' verglichen werden sollten.
Da es aber variabel viele sind, möchte ich sie ungern explizit initialisieren (das sind wieder fünf Zeilen mehr im Skript und eine Stelle mehr, die man beim nächsten Mal anzupassen vergessen kann).
Perl gibt eine entsprechende Warnung aus, die ich in der CGI-Fehlerdatei des Apache finde - so weit, so gut.
"perl -cw" liefert an dieser Stelle *keine* Fehlermeldung, weil dieser Effekt offenbar nur zur Laufzeit mit realen Daten festgestellt werden kann.

Schalte ich simultan "perl -w" *und* CGI::Carp ein, dann hängt sich der Prozeß auf. Er verbraucht sichtlich keine CPU-Zeit, kommt aber nicht in angemessener Zeit zu einem Ergebnis.

Dazu meine Fragen:

  • Kennt jemand von Euch diesen Effekt (und kann ihn ggf. umgehen)?
  • Was tut ihr, um für CGI-Skripte in Perl möglichst gute Diagnoseinformationen zu bekommen?

Für die Suchmaschine werde ich mir erst einmal damit behelfen, "perl -w" auszubauen ... :-(

Viele Grüße - Michael