... {Berlin, Bremen} .... {Rom - Pisa} .... {Castrop<br> Rauxel} ...
[...]
$text =~ s/{(.*?)<br>(.*?)}/{$1$2}/g;
Dein Ausdruck sucht die erste öffnende Klammer im Text, und von dort an
das nächste "<br>" - so eines vorhanden ist; in Deinem Beispiel ersetzt
Du also nicht "{Castrop<br> Rauxel}" durch "{Castrop Rauxel}" sondern
"... {Berlin, Bremen} .... {Rom - Pisa} .... {Castrop<br> Rauxel}"
durch "... {Berlin, Bremen} .... {Rom - Pisa} .... {Castrop Rauxel}".
Besser wäre es, Du ersetzt "(.*?)" durch ein diskriminierendes Fragment,
zum Beispiel, indem Du dort nur Zeichen zuläßt, die innerhalb der
Klammern stehen können, oder die ausschließt, welche dort nicht stehen
dürfen.