use strict; use XML::Rules; use Data::Dumper; my $parser = XML::Rules->new( rules => { _default => 'content', Variable => sub {$_[1]->{Name} => $_[1]->{Value}}, IP => 'content array', 'VariableConfig,ServerConfig' => 'no content', Server => 'no content by Name', Config => 'pass no content', }, ); my $data = $parser->parse(\*DATA); print Dumper($data); my @FQDNs = map {$_->{FQDN}} values %{$data->{ServerConfig}}; print "@FQDNs"; __DATA__ NAME somevalue NAME2 somevalue blah blue xxx.xxx.xxx.xx xxx.xxx.xxx.xx blue.some.domain black xxx.xxx.xxx.xx xxx.xxx.xxx.xx black.some.domain