Welche Fehlermeldung bekommst du ?
Ich denke es liegt daran das ä, ü ,ö ... auch Sonderzeichen sind.
Du müsstest also auch vor diese Zeichen einen \ setzten.
Vielleicht auch noch vor das &, ich probier das dann immer aus wenn bei mir sowas nicht geht.
Oder löschst du verändert dein Programm nicht alle ä, ü , ö ... ?
Das liegt dann daran das du jede Zeile einmal bearbeitest.
Besser wäre folgendes:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
use strict;
my @html;
open IN, "gps.pl.htm" or die "Datei nicht gefunden / Datei konnte nicht geoeffnet werden.";
@html = <IN>;
chomp @html;
close IN;
foreach (@html) {
  convert_umlaut($_);
}
sub convert_umlaut {
  my $temp = shift;
  print "Vorher: $temp"; 
  while ($temp =~ /\ä\ü\ö\ß/i) {
    
    
    
    $temp =~ s/\ö/ö\;/g;
    $temp =~ s/\ü/ü\;/g;
    $temp =~ s/\ä/ä\;/g;
    $temp =~ s/\Ö/Ö\;/g;
    $temp =~ s/\Ü/Ü\;/g;
    $temp =~ s/\Ä/Ä\;/g;
    $temp =~ s/\ß/ß\;/g;
  }
  print "Nacher: $temp"; 
}
 
 
EDIT: Das was das Forum falsch interpretiert, \ n und \ vor den & verändert.
MfG. Matze\n\n
<!--EDIT|Matze|1138890366-->
Mit freundlichen Grüßen: Matze