#!/usr/bin/perl -w use strict; use warnings; use diagnostics; my $userinput = '"schöner" auf'; my $verknuepfung = 1; # 1=OR 2=AND my %dateien = ( # dieser Hash simuliert mehrere ASCII-Dateien die per Schleife eingelesen werden 1 => 'Heute ist ein schöner Tag und die Sonne geht auf', 2 => 'Gestern war ein "schöner" Tag und die Sonne ging unter', 3 => 'foo', 4 => 'bar', 5 => 'Vorvorgestern war auch ein schöner Tag wo die Sonne auf ging', ); my @rueck = stringsuche ('bedingung',$userinput,$verknuepfung); my $code = shift @rueck; my $meld = shift @rueck; print "Rückmeldecode $code - $meld\n"; foreach my $text (values %dateien) { my $ergebnis = stringsuche ('suche',$text,@rueck); print "Untersuche '$text' => " . ($ergebnis ? "Treffer\n" : "\n"); } sub stringsuche { my $action = shift; if ($action eq 'bedingung') { my $userinput = shift; my $verknuepfung = shift; my @return; if ($userinput ne '') { if ($verknuepfung =~ /^[1|2]$/) { @return = (1,'OK'); $return[2] = $verknuepfung; push @return,split / /,$userinput; } else { @return = (0,'Verknüpfung falsch, 1=OR oder 2=AND'); } } else { @return = (0,'Kein Suchbegriff eingegeben'); } return @return; } elsif ($action eq 'suche') { my $text = shift; my @bedingung = @_; my $verknuepfung = shift @bedingung; my $return = 0; if ($verknuepfung eq '1') { foreach my $bed (@bedingung) { if ($text =~ /$bed/) { $return = 1; last; } } } elsif ($verknuepfung eq '2') { my $treffer = 0; foreach my $bed (@bedingung) { my $vergleich = quotemeta $bed; if ($text =~ /$vergleich/) { $treffer ++; } } $return = 1 if $treffer == scalar @bedingung; } return $return; } }