Código Perl para buscar y reemplazar un valor de etiqueta en XML

A continuación se muestra el XML que voy a utilizar:

<a>

<id>ABC</id>

<class />

<gender />

</a>

Quiero escribir un código Perl que busque la etiqueta 'id' y reemplace el valor "ABC" por "DEF".

Sin embargo, el anidamiento del XML anterior puede cambiar. Así que quiero hacer un código generalizado que busque la etiqueta 'id' independientemente de su posición exacta.

Hasta ahora puedo obtener la lógica en la que puedo reemplazar el valor en ABC, pero eso hace que mi código sea estático de la posición de la etiqueta 'id'.

#!usr/bin/perl
use warnings;
use XML::Simple;
use Spreadsheet::ParseExcel;
use Data::Dumper;
my $FileName = 'sample.xls';
my $xml_file = 'hello.xml';
$par=$ARGV[0];
my $xml = XMLin($xml_file,
    KeepRoot=>1,
    ForceArray=>1,);
$xml->{a}->[0]->{id}='DEF';
XMLout(
    $xml,
    KeepRoot =>1 ,
    NoAttr =>1,
    OutputFile => $xml_file,
        );
    }

Respuestas a la pregunta(3)

Su respuesta a la pregunta