in reply to TWig handler generation

You're close.
my $del_handler = sub { $_->delete() }; my $node_to_delete = 'node1-node2-node3-node4'; my @tags = split('-', $node_to_delete ); my $handlers = { map { $_ => $del_handler } @tags }; my $twig = new XML::Twig( twig_handlers => $handlers ); $twig->parsefile(*DATA);


holli

You can lead your users to water, but alas, you cannot drown them.

Replies are listed 'Best First'.
Re^2: TWig handler generation
by nico38100 (Novice) on Feb 01, 2019 at 16:52 UTC
    Hello holli Thanks for your email, I tried what you post but it doesn't seem to work. Here my code instead of having *Data I am parsing a file . Here the code
    @elements = split('-', $elements_to_treat); if ($subject[0] eq 'delete_node'){ print "Delete Node ".$element."\n " if ($dbgFlag == 1); &delete_node(@elements,$file_to_read); } sub delete_node { #--------------------------------------------------------------------- +--------- my ($elements,$file_to_read) = @_; my $del_handler = sub { $_->delete()}; my @all_element = @{$elements}; my $handlers = {map {$_ => $del_handler} @all_element}; my $twig = new XML::Twig(twig_handlers => $handlers); $twig->parsefile($file_to_read); }

    And here the results of my parsing which is ending in errror

    Line of configuration file: delete_node:{node1-node2-node3-node4} Element of configuration to treat: 'node1-node2-node3-node4' Delete Node Couldn't open node1: No such file or directory at C:\Users\test\Documents\

    it seems it's created a file but I don't understand why, if you have an idea ? Many Thanks

      You are calling your sub with a an array as "first argument": &delete_node(@elements,$file_to_read);
      But in your sub you expect an arrayref: my ($elements,$file_to_read) = @_;
      You need to pass your data in as a reference. Also, don't call subs with "&". And if your learning material teaches you to, throw it away.
      delete_node(\@elements,$file_to_read);

      See if that fixes it.


      holli

      You can lead your users to water, but alas, you cannot drown them.