Quote
Original von uzer
if ($sContent =~ /Genre.*\n(.*)(mehr...)/) {
$genre = $1;
if ($genre =~ /<a href=.*">(.*)<\/a>/) {
print "$1";
}
damit gibt er mir "Family" aus obwohl das der letzte genre in der Liste ist (Comedy / Animation / Family) !??? Das heißt die anderen parsed er wohl, aber gibt sie nicht aus 
(Ohne mir die Quellseite jetzt näher angeschaut zu haben ...)
Du weißt bzw. hast bedacht, dass .* "greedy" ist? Das bedeutet, es "nimmt" sich so viele Zeichen wie möglich. Beispiel: "a.*a" matched bei "ababa" auf den kompletten String, nicht nur auf "aba".
Verwende mal ".*?" stattdessen oder versuche noch spezifischer zu sein (z.B. eventuell "[^>]*" statt ".*", um nur die Parameter von HTML-Tags zu erwischen und nicht über das ">" hinauszugehen)
(Zu "greedy" siehe auch "man perlre")
Quote
Dann wäre hier noch dieses Beispiel mit dem "global" flag, damit müsste man das doch eigentlich lösen können:
#!/usr/local/bin/perl -w
$t = "-ab-cd-";
foreach($t =~ /-[a-z][a-z]-/g) { print "$_ " }
aber hier wird dann "-ab-" ausgegeben, aber ich dachte gerade durch das /g flag müsste -ab-cd- ausgegeben werden !??
Nach dem ersten Treffer ("-ab-") wird HINTER selbigem weitergesucht, also ab dem "c"! Daher erhältst Du keinen weiteren Treffer.
Mit "Extended Patterns" (siehe ebenfalls "man perlre") kann man Ausdrücke definieren, die auf Zeichen matchen, diese aber nicht in das Ergebnis mit einbeziehen. Aber auch damit fällt mir spontan keine Lösung ein, die das gewünscht Ergebnis produziert.
Liefert an der Stelle nicht vielleicht auch ein split(/-/,$t) die gewünschten Daten?