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


in reply to Re: XML::Twig newbie question
in thread XML::Twig newbie question

Another way would be to make the subroutine curried (that is expecting to get the parameters separately, not all at once):

foreach my $file (@files){ # set up the XML parser: my $twig= XML::Twig->new( twig_handlers => { topicref => topicref_processing($file), xref => topicref_processing($file) }, ); $twig->parsefile($file); $twig->purge; } sub topicref_processing { my ($file) = @_; return sub { my($twig, $topicref) = @_; my($atts) = $topicref->atts(); if($$atts{'keyref'}){ ### associate this keyref with $file } } }

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

Replies are listed 'Best First'.
Re^3: XML::Twig newbie question
by Anonymous Monk on Sep 18, 2012 at 07:31 UTC

    Another way would be to make the subroutine curried (that is expecting to get the parameters separately, not all at once):

    Sure, you could write your closure that way ( the schönfinkeling way), but it gains you nothing in this example, it just takes a little more memory

      Depends on the complexity of the subroutine. Maybe you do not want to include all that code in the middle of the loop. I would not sweat over the tiny difference in memory footprint or the cost of two additional subroutine calls. Use whatever makes the code easier to maintain.

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

Re^3: XML::Twig newbie question
by slugger415 (Monk) on Sep 18, 2012 at 15:50 UTC

    "Curried?" sounds delicious! :-) Never heard that phrase before.

    Thank you, this is a simple solution that works perfectly for me.

    Scott