Hallo Robert,
$text =~ s/(&(?:amp|gt|lt|quot))?;/$1 ? $1.':' : 'was anderes'/ge;
s/regex/code/ge ersetzt einfach das, was der reguläre Ausdruckt matcht durch das Ergebnis des Codes.
$1 ? $1.';' : 'was anderes' ist einfach ein inline-if. Wenn $1 definiert ist, wird einfach durch das ersetzt, was gematcht wurde. Statt $1.';' könnte man in dem Fall natürlich auch $0 nehmen, fällt mir da auf.
Grüße
Daniel