[...] Passt also auch in beiden Fällen.
Nein. Deine Erwartungshaltung zu $1 ist falsch:
my $s = 'foo-html';
if ($s =~ /^(.*).html$/) {
print "1|$1 $&\n";
}
if ($s =~ /^(.*)\.html$/) {
print "2|$1 $&\n";
}
Warum ist /^(.*).html$/ bezüglich der Aufgabenstellung falsch?
Weil hier der zweite Punkt anlog dem ersten ein Platzhalter ist.