--- 
author: 
  email: rafl@fsfe.org
  keyid: 742f2a428e635a5e
  name: Florian Ragwitz
categories: 
  - Perl
date: 2009-08-19T08:27:25Z
guid: a9b71ca9-4050-4322-9afe-2f5e2ee9a776
modified: 2009-08-19T08:27:25Z
raw: "-----BEGIN PGP SIGNED MESSAGE-----\nHash: SHA1\n\n=pod\n\nYou've probably already heard of Sartak's awesome\nL<MooseX::Role::Parameterized|http://search.cpan.org/perldoc?MooseX::Role::Parameterized>.\n\nAs of version 0.25, MooseX::Declare provides some nice sugar for\nthat. This is what it looks like:\n\n  lang:Perl\n  use MooseX::Declare;\n\n  role Counter (Str :$name) {\n    has $name => (is => 'rw', isa => 'Int', default => 0);\n\n    method \"increment_${name}\" {\n      $self->$name( $self->$name + 1 );\n    }\n\n    method \"reset_${name}\" {\n      $self->$name(0);\n    }\n  }\n\n  class MyGame::Weapon {\n    with Counter => { name => 'enchantment' };\n  }\n\n  class MyGame::Wand {\n    with Counter => { name => 'zapped' };\n  }\n\nJust thought I'd let you know, since i haven't gotten around to\nactually document this. In case you like it, have some spare\ntuits, and want to help out, the repository is\nL<right here|git://github.com/rafl/moosex-declare.git> :-)\n\n=cut\n-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1.4.6 (GNU/Linux)\n\niD8DBQFKi7dGdC8qQo5jWl4RAkm2AJ9m1S3kzkHl1zgMQfh2bU9pqFLnVwCcCNpN\nEMIF5I5VMLWrpy/ESf3Bs14=\n=9SN1\n-----END PGP SIGNATURE-----\n"
signed: 1
summary: " You've probably already heard of Sartak's awesome MooseX::Role::Pa- rameterized. …"
tags: 
  - 
    perl: 0
  - 
    moose: 0
  - 
    syntax: 0
text: "    You've probably already heard of Sartak's awesome MooseX::Role::Pa-\n    rameterized.\n\n    As of version 0.25, MooseX::Declare provides some nice sugar for\n    that. This is what it looks like:\n\n      lang:Perl use MooseX::Declare;\n\n      role Counter (Str :$name) { has $name => (is => 'rw', isa => 'In-\n      t', default => 0);\n\n        method \"increment_${name}\" { $self->$name( $self->$name + 1 ); }\n\n        method \"reset_${name}\" { $self->$name(0); } }\n\n      class MyGame::Weapon { with Counter => { name => 'enchant-\n      ment' }; }\n\n      class MyGame::Wand { with Counter => { name => 'zapped' }; }\n\n    Just thought I'd let you know, since i haven't gotten around to ac-\n    tually document this. In case you like it, have some spare tuits,\n    and want to help out, the repository is right here :-)\n"
title: Parameterized Roles with MooseX::Declare
type: pod
uri: http://perldition.org/articles/Parameterized%20Roles%20with%20MooseX%3A%3ADeclare.pod
xhtml: "<div class=\"pod\">\n<p>You've probably already heard of Sartak's awesome\n<a href=\"http://search.cpan.org/perldoc?MooseX::Role::Parameterized\">MooseX::Role::Parameterized</a>.</p>\n<p>As of version 0.25, MooseX::Declare provides some nice sugar for\nthat. This is what it looks like:</p>\n<pre><span class=\"Keyword\">use</span><span class=\"Normal\"> </span><span class=\"Function\">MooseX::Declare</span><span class=\"Normal\">;</span>\n\n<span class=\"Normal\">role Counter (Str :</span><span class=\"DataType\">$name</span><span class=\"Normal\">) {</span><span class=\"Normal\">\n</span><span class=\"Normal\">  has </span><span class=\"DataType\">$name</span><span class=\"Normal\"> =&gt; (is =&gt; </span><span class=\"Operator\">&apos;</span><span class=\"String\">rw</span><span class=\"Operator\">&apos;</span><span class=\"Normal\">, isa =&gt; </span><span class=\"Operator\">&apos;</span><span class=\"String\">Int</span><span class=\"Operator\">&apos;</span><span class=\"Normal\">, default =&gt; 0);</span>\n\n<span class=\"Normal\">  method </span><span class=\"Operator\">&quot;</span><span class=\"String\">increment_</span><span class=\"DataType\">${name}</span><span class=\"Operator\">&quot;</span><span class=\"Normal\"> {</span><span class=\"Normal\">\n</span><span class=\"Normal\">    </span><span class=\"DataType\">$self</span><span class=\"Normal\">-&gt;</span><span class=\"DataType\">$name</span><span class=\"Normal\">( </span><span class=\"DataType\">$self</span><span class=\"Normal\">-&gt;</span><span class=\"DataType\">$name</span><span class=\"Normal\"> + </span><span class=\"Float\">1</span><span class=\"Normal\"> );</span><span class=\"Normal\">\n</span><span class=\"Normal\">  }</span>\n\n<span class=\"Normal\">  method </span><span class=\"Operator\">&quot;</span><span class=\"String\">reset_</span><span class=\"DataType\">${name}</span><span class=\"Operator\">&quot;</span><span class=\"Normal\"> {</span><span class=\"Normal\">\n</span><span class=\"Normal\">    </span><span class=\"DataType\">$self</span><span class=\"Normal\">-&gt;</span><span class=\"DataType\">$name</span><span class=\"Normal\">(0);</span><span class=\"Normal\">\n</span><span class=\"Normal\">  }</span><span class=\"Normal\">\n</span><span class=\"Normal\">}</span>\n\n<span class=\"Normal\">class </span><span class=\"Function\">MyGame::Weapon</span><span class=\"Normal\"> {</span><span class=\"Normal\">\n</span><span class=\"Normal\">  with Counter =&gt; { name =&gt; </span><span class=\"Operator\">&apos;</span><span class=\"String\">enchantment</span><span class=\"Operator\">&apos;</span><span class=\"Normal\"> };</span><span class=\"Normal\">\n</span><span class=\"Normal\">}</span>\n\n<span class=\"Normal\">class </span><span class=\"Function\">MyGame::Wand</span><span class=\"Normal\"> {</span><span class=\"Normal\">\n</span><span class=\"Normal\">  with Counter =&gt; { name =&gt; </span><span class=\"Operator\">&apos;</span><span class=\"String\">zapped</span><span class=\"Operator\">&apos;</span><span class=\"Normal\"> };</span><span class=\"Normal\">\n</span><span class=\"Normal\">}</span>\n</pre>\n<p>Just thought I'd let you know, since i haven't gotten around to\nactually document this. In case you like it, have some spare\ntuits, and want to help out, the repository is\n<a href=\"git://github.com/rafl/moosex-declare.git\">right here</a> :-)</p>\n\n\n</div>"
