Обновление значения атрибута xml на основе других с помощью Perl

Это мой пример XML-файла

<manifest>
 <default>
    <remote>remote1</remote>
    <revision>rev1</revision>
 </default>
 <project>
    <name>common</name>
    <path>opensource/device</path>
    <revision>sa</revision>
    <x-ship>oss</x-ship>
 </project>
 <project>
   <name>external</name>
   <path>source/tp</path>
   <x-ship>none</x-ship>
 </project>
 <project>
   <name>ws</name>
   <path>opensource/ws</path>
   <remote>nj</remote>
   <revision>myno</revision>
   <x-ship>none</x-ship>
 </project>
</manifest>

В этом мне нужно обновить значение ревизии только тогда, когда<path> содержит строку с открытым исходным кодом.

Я много искал, но не смог найти ничего полезного для этого, я мог бы изменить значение в зависимости от позиции, как показано ниже, может кто-нибудь помочь мне обновить это? Или дайте мне знать, если есть лучшая библиотека Perl для этого.

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my $xml_file = 'dev.xml';

my $xml = XMLin(
    $xml_file,
    KeepRoot => 1,
    ForceArray => 1,
);

$xml->{manifest}->[0]->{project}->[2]->{revision} = 'kyo';

XMLout(
    $xml,
    KeepRoot => 1,
    NoAttr => 1,
    OutputFile => $xml_file,
);

Ответы на вопрос(2)

Ваш ответ на вопрос