On Wed, Oct 19, 2011 at 7:28 PM, Stevan Little <stevan.lit...@iinteractive.com> wrote: > Annotations/Attributes are kind of the bastard love child of compiler hints > and macros, they make less sense in a highly dynamic language like Perl. > > Can you explain what it is you want to do with annotations/attributes? And > perhaps we can point you in a more perl-ish direction.
Honestly I have an ambitious plan to create a module using Moose that will start out small and eventually evolve into something like what .Net XML Serialization[1], and JAXB[2] offer -- XML binding and serialization, and class generation from XML schema. Much like what XML::Toolkit has originally intended to do, but I'd like it to follow the API -- which unfortunately depends on Annotation/Attributes -- of .Net, JAXB, or Simple[3] as closely as possible because I find it simpler and easier to understand. I'm currently thinking of doing something like this for the XML schema described in [1]: package Books; use namespace::autoclean; use XML::Something; use Moose -traits => [ 'XMLType' => { namespace => 'urn:xmlns:25hoursaday-com:my-bookshelf' }, 'XMLRootElement' => { name => 'books', namespace => 'urn:xmlns:25hoursaday-com:my-bookshelf' }, ]; has 'book' => ( traits => [ 'Array', 'XMLElement' ], is => 'rw', isa => 'ArrayRef[BookType]', required => 1, ); __PACKAGE__->meta->make_immutable; # =-=-=-=-=-=-=-=-=-=-=-=- package BookType; use namespace::autoclean; use XML::Something; use Moose -traits => [ 'XMLType' => { namespace => 'urn:xmlns:25hoursaday-com:my-bookshelf', order => [ 'title', 'author', 'publicationdate' ] }, ]; has 'title' => ( traits => [ 'XMLElement' ], is => 'rw', isa => 'Str', required => 1, ); has 'author' => ( traits => [ 'XMLElement' ], is => 'rw', isa => 'Str', required => 1, ); has 'publicationdate' => ( traits => [ 'XMLElement' => { name => 'publication-date', datatype => 'date' } ], is => 'rw', isa => 'DateTime', required => 1, ); has 'publisher' => ( traits => [ 'XMLAttribute' ], is => 'rw', isa => 'Str', ); has 'onloan' => ( traits => [ 'XMLAttribute' => { name => 'on-loan' } ], is => 'rw', isa => 'Str', ); __PACKAGE__->meta->make_immutable; # =-=-=-=-=-=-=-=-=-=-=-=- [1] http://msdn.microsoft.com/en-us/library/ms950721.aspx [2] http://jaxb.java.net/tutorial/section_1_3-Hello-World.html [3] http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php