use feature qw(say); use Data::Dumper; my $data =<<'XML-type'; someValuesomeValuesomeValue someValuesomeValuesomeValue someValuesomeValue someValuesomeValuesomeValuesomeValue XML-type my @processed; local $/ = ''; open STRH , '<', \($data); my @items = ; close STRH; @processed = map { my $item =$_; $item =~ s/<.?item>//g; push @processed, {$item =~ m { <([^>]+)>([^<]+)< }gx}; } @items; print Dumper \@processed; #### $VAR1 = [ { 'key2' => 'someValue', 'key4' => 'someValue', 'key1' => 'someValue', 'key3' => 'someValue' }, { 'key2' => 'someValue ', 'key4' => 'someValue', 'key1' => 'someValue', 'key3' => 'someValue' }, { 'key2' => 'someValue', 'key4' => 'someValue', 'key1' => 'someValue', 'key3' => 'someValue' }, {} ];