use Mosche;
Ich hab'n Problem. Und zwar: Ein CGI nimmt eine Reihe von Suchwoertern entgegen. Es startet eine Suchmaschine, die gibt URLs zurueck. Das CGI liest den Quellcode der Seiten in jeweils ein Skalar ein. Fuer jeden Quelltext soll das CGI alle Abschnitte von <p> bis zum naechsten <p> finden (die Paragraphs werden leider nicht geschlossen...), in denen mindestens ein Suchwort vorkommt
Also entweder habe ich dein Problem nicht verstanden, oder dir hilft vielleicht dieses Stückscher Testquellcode:
############### biotest ###########
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my %data = (
'http://192.168.2.1' => '<html><head><title></title></body><p>dies ist ein langer text<p>und noch ein text suchwort1<p>und ein weiterer text (inzwischen schon der dritte) suchwort2<p></body></html>',
'http://192.168.2.2' => '<html><head><title></title></body><p>dies ist ein langer <p>ein text suchwort1<p>und ein weiterer text (inzwischen schon der dritte)<p></body></html>',
'http://192.168.2.3' => '<html><head><title></title></body><p>dies ist ein text<p>und ein text <p>und ein weiterer text (inzwischen schon der dritte) suchwort2<p></body></html>'
);
my @searchwords = qw(suchwort suchwort1 suchwort2);
my %q;
while (my ($url, $val) = each %data) {
while($val =~ s/<p>(.*?)<p>/<p>/) {
push (@{$q{$url}},$1) if (grep { $1 =~ /$_/ } @searchwords;
}
}
print Dumper (%q);
############### / biotest ###########
Der Unterschied zu deinem Ansatz ist derjenige, dass ich den Dateiinhalt nur Schritt für Schritt ansehe (mit dem s///) und auch nur jedes einzelne Suchwort einzeln abfrage (weil ich nicht wusste, wie ich aus dem Array den Regex bastel - so ist das zwar insgesamt weniger performant, aber nicht weiter schlimm, solange die Anzahl der Suchworte relativ gering ist).
use Tschoe qw(Matti);
PS: CGI ist eine Schnittstelle und kein Programm... *SCNR*