Hi!
my $s = 'foo.html';
$s =~ /^(.).html$/;
print "$&\n"; # foo.html
$s =~ /^(.).html$/;
print "$&\n"; # same as above
>
> $& (alias $MATCH) beeinhaltet in beiden Fällen 'foo.html'. Wo ist der Unterschied, oder anders gefragt: Warum führt das Nicht-Maskieren des zweiten Punkts zu einem Fehler?
Die Aufgabenstellung war, dass alle Dateien, die auf .html enden, berücksichtigt werden. Es werden aber auch Dateien mit {beliebiges Zeichen}html berücksichtigt. Das ist der Fehler. Man muss nicht nur die gewünschten Fälle berücksichtigen und sich freuen, wenn die gehen, sondern man muss auch die ungewünschten wirksam ausschließen.
Deine beiden Fälle passen, weil im ersten Muster der . in foo.html ebenfalls in die Kategorie "beliebiges Zeichen" fällt und im zweiten Fall exakt passt. Das erste Muster lässt auch foo-html zu, das zweite nicht - und damit erfüllt das erste die Anforderung nicht mehr vollständig.
Lo!