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


in reply to Re^2: Parsing HTML/XML with Regular Expressions (XML::Twig)
in thread Parsing HTML/XML with Regular Expressions

You presumed ~right about DATA filehandle.

The xmltwig.org and docs specify parse    $string or \*OPEN_FILEHANDLE among twig's methods.

So you are right: I had to pass an handle not an iterator (?) like <DATA>

I dunno when I took this bad habit but if you look at this and this other one and this other too and probably many others of mines, $twig->parse(<DATA>) works!!

So $twig->parse(<DATA>) does not works with your example but i can confirm that passing the filehandle $twig->parse(\*DATA) or even $twig->parse(*DATA) works as expected.

Can be that wrong form works (at least sometimes) because of the XML::Twig ability to parse streams of XML?

L*

There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

Replies are listed 'Best First'.
Re^4: Parsing HTML/XML with Regular Expressions (XML::Twig)
by haukex (Archbishop) on Oct 18, 2017 at 19:21 UTC

    In those three examples you linked to, right before you say <DATA> you do $/='';, which enables "paragraph mode", it's as if the input record separator $/ was /\n\n+/.

    So you are right: I had to pass an handle not an iterator (?) like <DATA>

    <DATA> is the equivalent of readline(DATA), and since readline is being called in list context, it'll read all the records from the handle and return a list of them. So as long as your __DATA__ section doesn't contain any empty lines, it's essentially the same as a slurp - this is probably why the "wrong form" still works.