tags:

views:

37

answers:

1

Tried this below but I get a 0 file and this error. print() on unopened filehandle OUT at C:/Perl/site/lib/XML/Twig.pm line 3036.

!c:\perl\bin\perl.exe

use strict; use XML::Twig;

my $upd_file = "updev.xml" ; my $main_file = "main.xml" ;

get the info we need by loading the update file

my $t_upd= new XML::Twig();

$t_upd->parsefile( $upd_file);

my $upd_dev_id = $t_upd->root->next_elt( 'DEVNUM')->text; my $upd_dev = $t_upd->root->next_elt( 'DEVS'); my $upd_seg = $t_upd->root ;

now process the main file

my $t= new XML::Twig( TwigHandlers => { DEVS => \&DEVS, }, PrettyPrint => 'indented', ); $t->parsefile( $main_file); $t->flush; # don't forget or the last closing tags won't be printed

open( OUT, ">$main_file") or die "cannot open out file main_file:$!";

sub DEVS { my( $t, $DEVS)= @_; # just replace devs if the previous dev_id is the right one if( $DEVS->prev_elt( 'DEVNUM')->text eq $upd_dev_id) { $upd_dev->replace($DEVS);
} $t->flush(*OUT) ; # print and flush memory so only one dev is in there at once

}

close OUT ;

A: 

Hello Cobra,

Probably your problem is that you have passed the filehandle not a filehandle reference.

$t->flush(\*OUT) # look at the '\'

Some suggestions for your code: in modern perl is better to use the three arguments open and indirect filehandles:

open (my $fh_out, '>', $out_file) or die "unable to open '$out_file' for writing: $!";

$twig->print($fh_out); # this prints to the filehandle

Another way of printing is stringify your tree with $twig->sprint and print to a filehandle as usual

 print {$fh_out} $twig->sprint();
Pablo Marin-Garcia
Pablo, Thank you very much. That work like a charm.Rey
Cobra
Then you should accept the answer ;-)
Pablo Marin-Garcia