package Nose; use XML::LibXML; use Moo::Role; my $xml = sub { my ( $self, $params ) = @_; # you really need $self my $doc = XML::LibXML::Document->new( '1.0', 'utf-8' ); my $root = $doc->createElement("myapp"); my $tag = $doc->createElement("nose"); my $value = $params->{"nose"}; $tag->appendTextNode($value); $root->appendChild($tag); $doc->setDocumentElement($root); $doc->toString(); }; sub nose { my ( $self, $params ) = @_; $self->$xml($params); } 1; __END__