la prima cosa da fare è sempre leggere la documentazione, se lo avessi fatto avresti scoperto che tramite questo codice avresti potuto vedere la struttura logica del file.xml

codice:
use XML::Simple;
use Data::Dumper;

my $simple = XML::Simple->new( ); 
my $tree = $simple->XMLin( './data.xml' );

print Dumper($tree);
che produce questo output:
codice:
$VAR1 = {
          'reply' => [
                       {
                         'user' => 'Larry',
                         'text' => 'Hi!',
                         'number' => '0'
                       },
                       {
                         'user' => 'Niki',
                         'text' => 'Morning!',
                         'number' => '1'
                       },
                       {
                         'user' => 'Joe',
                         'text' => 'Night!',
                         'number' => '2'
                       }
                     ]
        };
il che ti avrebbe consentito di capire che la struttura del comando che proponi:

codice:
print $tree->{ reply }->{ user }[0];
è logicamente sbagliata.

la struttura esatta è:

codice:
print $tree->{reply}->[<numero>]->{user},"\n";
per cui per visualizzare tutti gli user basta:
codice:
for (my $i=0; $i<=$#{$tree->{'reply'}}; $i++) {
print "$i: ",$tree->{'reply'}->[$i]->{'user'},"\n";
}