It is the parser's job to handle decoding.
To do so, the parser needs to know the encoding of the XML.
The XML declaration (<?xml version="1.0" encoding="ISO-8859-1"?>) does provide that information for the parser.
$xml =~ s/^(?:.*\n)//; # remove first line - the encoding line
By removing the XML declaration the Parser
seems to guess the (wrong) source encoding. uses the default encoding.*
With XML declaration your code seems to work correctly. Please notice that XML::Fast upgrades the data to utf8. But now in the correct manner.