#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use XML::Simple; my $tree=XMLin('test.svg'); my @texte=match_text($tree); print Dumper(\@texte); sub match_text { my $ref=shift; my @list; if(ref($ref) eq 'ARRAY') { push(@list,match_text($_)) for(@$ref); } elsif(ref($ref) eq 'HASH') { if(exists($ref->{text})) { if(ref($ref->{text}) eq 'ARRAY') { push(@list,$_) for(@{$ref->{text}}); } elsif(ref($ref->{text}) eq 'HASH') { push(@list,$ref->{text}); } } push(@list,match_text($ref->{$_})) for(keys(%$ref)) } return @list; }