Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^2: XML::Twig - provide additional parameters to twig_roots handlers

by kejv2 (Novice)
on Oct 01, 2012 at 19:29 UTC ( #996721=note: print w/ replies, xml ) Need Help??


in reply to Re: XML::Twig - provide additional parameters to twig_roots handlers
in thread XML::Twig - provide additional parameters to twig_roots handlers

Ah, so the solution is to use slight closure trick instead of being provided by the module itself, but that's ok. It's a pity that the topic you are referencing isn't properly named. Otherwise I could have maybe found the info myself...


Comment on Re^2: XML::Twig - provide additional parameters to twig_roots handlers
Re^3: XML::Twig - provide additional parameters to twig_roots handlers
by Jenda (Abbot) on Oct 01, 2012 at 22:16 UTC

    The thing is that you may very well want to have several different twig roots with different handlers and different piece of data to pass. XML::Twig could have given you a "pad" within the parser object that you could use to store something in between the handler calls, but (at least according to a quick scan ... I don't use XML::Twig myself) seems mirod did not think it's necessary.

    Yes, I agree that other thread is a bit hard to find.

    Jenda
    Enoch was right!
    Enjoy the last years of Rome.

      Well, the XML::Twig object is an old fashion hashref, and I have no plan to change this, so you can always add your own fields to it. Or use a "hidden" attribute (one which names starts with '#') to attach private data to any element, including the root.

      A closure is the cleanest way to go though. It's not a trick, it's just a common idiom.

      BTW, a google search on "XML::Twig passing data to handlers" (or using "arguments" instead of data) returns plenty of answers to that question.

        Or use a "hidden" attribute (one which names starts with '#') to

        I take it that means twig will ignore it?

        When I stashed data I usually prefer $$t{_anony_foo} or $$t{_progname_foo} or $$t{_subclassname_foo}

        The problem with adding own fields into the hashref is that you might unintentionally step over something. Or have an update to the module break your script, because the module starts using some key you added. That's why I specifically reserved $parser->{pad} as a place for user defined data attached to a parser and $parser->{parameters} as a place where you can find the additional parameter passed to the $parser->parse() call in XML::Rules.

        Agreed on the closure being the cleanest way.

        Jenda
        Enoch was right!
        Enjoy the last years of Rome.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://996721]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (10)
As of 2014-07-28 18:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (205 votes), past polls