http://www.perlmonks.org?node_id=576183


in reply to __DATA__ in XML::Simple and/or IO::Handle

As runrig said, XMLin(\*DATA) is probably what you want (although this node describes why you really need a couple of extra options).

The "Unable to recognise encoding..." message is actually an informational warning from XML::SAX::PurePerl. Due to the fact that your XML started with some whitespace (perhaps a blank line), the parser was unable to autodetect the encoding by examining the byte(s) used to represent the initial '<' character. In the absence of this information, the parser assumes utf-8 encoding and continues.

It's not a particularly helpful message and none of the other XML parser modules emit warnings in the same situation.

You should be aware that the PurePerl parser (version 0.14 of XML::SAX) has a bug in its handling of character entities (eg: '&amp;') in attributes. This bug caused the XML::Simple test suite to fail so I'm guessing you must have forced the install. I've supplied patches to fix the bug and remove the encoding warning so I'm hopeful both issues will be fixed in the next release.

FYI: I released a new version of XML::Simple yesterday which includes improved documentation around passing a filehandle to XMLin.