Christoph Schnauß: Problem gelöst, neues Problem gefunden

Beitrag lesen

hallo,

so, jetzt hab ichs gefunden. Wie so häufig lag das Problem zwar in der angegebenen Zeile, war aber etwas ganz anderes als vermutet. Ich habe mehr oder weniger zufällig mal die beiden Seiten vertauscht, so, daß mein "oder" eine andere Reihenfolge bekommt  -  siehe da, schon gibts keinerlei Probleme mehr. Da wird denn auch der "richtige" Operator akzeptiert, den du gerne wolltest, Frank. Jetzt sieht der Codeschnipsel so aus:

if (!$boolean || $boolean eq 'und' ) {
      foreach $term (@terms) {
         if (!$case || $case eq 'insensitive' ) {
            if (!($string =~ /$term/i)) {
               $include{$FILE} = 'no';
               last;
            } else {
               $include{$FILE} = 'yes';
            }
         } elsif (!$case || $case eq 'sensitive' ) {
usw.

Jetzt gibts aber noch ein zweites kleines Problem, diesmal mit einem regulären Ausdruck. Je nachdem, welcher Suchbegriff eingegeben wurde, gibt es einen kurzen Text - wenn der Suchbegriff existiert, wird die Dateiliste ausgegeben, wurde (versehentlich) kein Suchbegriff ins Formular eingetragen, gibt es einen entsprechenden Hinweis. Das geht ungefähr so:
   if ($begriff) {
      $text = "$begriff existiert in folgenden Dateien";
   } elsif (!$begriff) {
      $text = "<Formular wurde leer gelassen";
Jetzt soll aber noch ein Hinweis kommen, falls ein Suchbegriff eingegeben wurde, der nirgends gefunden werden kann. Ich wollte das so machen:
   } elsif (!($string =~ /$begriff/)) {
      $text ="$begriff konnte nirgends gefunden werden";
   }
Und das haut nicht hin, es wird immer "$begriff existiert in folgenden Dateien" ausgegeben, auch wenn der Suchbegriff nicht existiert  -   die Suchliste bleibt danach natürlich leer. So, wie ich es jetzt hier angegeben habe, ist das auch logisch, weil in _dieser_ Form ja das erste "if" nur nach dem Vorhandensein von $begriff fragt, und diese Bedingung stimmt auch, wenn ein "falscher" Suchbegriff drinsteht.

$string enthält den Inhalt sämtlicher Dateien. Es hat bisher nicht genutzt, das nochmal zu splitten  -  oder aber diese Bedingung als erstes "if" hinzuschreiben und die anderen darunter als "elsif" zu notieren. Ein paar Dutzend Varianten hab ich durchprobiert. Gibts noch einen hilfreichen Hinweis?

Grüße aus Berlin

Christoph S.