use XML::Simple; sub parse_newick { local $_ = shift; s<[(]>[]g; s<[,]>[]g; s<[)]>[]g; XMLin "$_", ForceContent => 1, ContentKey => 'VALUE'; } use Data::Dumper; print Dumper parse_newick( '(A,(B,C))' );