XMLin читает в xml XMLout генерирует xml. Вам необходимо написать вывод XMLout для изменения файла.
Этот код должен работать:
use XML::Simple;
use Data::Dumper;
use feature 'say';
use autodie;
my $data = XMLin('./test.xml');
my @user_input = qw(
Basket1:2A:apple:orange:peach:
Basket2:2B:apple:banana:orange:grapes:
);
my $new;
foreach my $line (@user_input) {
chomp $line;
# we don't need this in my example, but you do when you read from a file
my ($name, $Tag, @fruitlist) = split /:/, $line;
foreach my $fruit ( @{$data->{Run}} ) {
my $list = {};
%{$list} = map { $_ => 1 } @{ $fruit->{List}->{Fruit} };
if ( $fruit->{NAME} eq $name && $fruit->{tag} eq $Tag ) {
my @test = @{ $fruit->{List}->{Fruit} };
foreach $f ( @fruitlist ) {
if ( !$list->{$f} ) {
push @test, $f;
}
}
print "$fruit->{NAME} $fruit->{tag}";
print Dumper(\@test);
$fruit->{List}->{Fruit} = \@test;
}
}
}
open (my $fh, '>', 'new.xml' );
print $fh XMLout( $data, RootName => "Start" );
close $fh;