my $person =
Person->new( first_name => 'Dave' );
-$person->first_name('Stevan');
-print $person->first_name; # Dave</code></pre>
+$person->first_name('Stevan'); # dies</code></pre>
</div>
</div>
<div class="slide">
- <h1>Hot Role-on-Role Action</h1>
+ <h1>Roles With Roles</h1>
<pre><code>package Comparable;
use Moose::Role;
</div>
<div class="slide">
- <h1>Hot Role-on-Role Action</h1>
+ <h1>Roles With Roles</h1>
<pre><code>package TestsEquality;
use Moose::Role;
<div class="slide">
<h1>Delayed Conflict</h1>
- <pre><code>package StateOfTexas;
+ <pre><code>package SysadminAssassin;
with 'Killer';</code></pre>
<ul>
- <li><code>StateOfTexas</code> must implement its own <code>execute</code></li>
+ <li><code>SysadminAssassin</code> must implement its own <code>execute</code></li>
<li>But loading the <code>Killer</code> role by itself does not cause an error</li>
</ul>
</div>
has shoe_size => (
is => 'ro',
- required => 'ro',
+ required => 1,
);</code></pre>
</div>
Num
Int
ClassName
+ RoleName
</pre>
</div>
<hr />
-<pre><code>subtype 'DateTime',
+<pre><code>subtype 'DateTime',
as 'Object',
where { $_->isa('DateTime') },
message { ... };</code></pre>
<hr />
<pre><code>subtype 'Printable',
- as 'Object',
+ as 'Object',
where
{ Moose::Util::does_role(
$_, 'Printable' ) },
<pre><code>my %ok = map { $_ => 1 }
qw( red blue green );
-subtype 'Color'
+subtype 'Color'
as 'Str',
where { $ok{$_} },
message { ... };</code></pre>
use Moose;
has _favorite_numbers => (
traits => [ 'Array' ],
- is => 'ro',
+ is => 'bare',
isa => 'ArrayRef[Int]',
default => sub { [] },
init_arg => undef,
<li>Use <code>weak_ref</code> to avoid circular references</li>
<li>Use trigger to do an action post-attribute write</li>
<li>Use delegations to hide "internal" objects</li>
+ <li>Use native delegations to treat Perl types as objects</li>
<li>Traits and metaclasses let you extend Moose's core attribute features</li>
</ul>
</div>
Iterate til this passes all its tests</pre>
</div>
+<div class="slide">
+ <h1>Questions?</h1>
+</div>
+
<div class="slide fake-slide0">
- <h1>Part 7: Introspection</h1>
+ <h1>The End</h1>
</div>
+<div class="slide">
+ <h1>More Information</h1>
+
+ <ul>
+ <li><a href="http://moose.perl.org/">http://moose.perl.org/</a></li>
+ <li><a href="http://search.cpan.org/dist/Moose/lib/Moose/Manual.pod">Moose::Manual</a> and <a href="http://search.cpan.org/dist/Moose/lib/Moose/Cookbook.pod">Moose::Cookbook</a></li>
+ <li><a href="irc://irc.perl.org/#moose">irc://irc.perl.org/#moose</a></li>
+ <li>mailing list - <a href="mailto:moose@perl.org">moose@perl.org</a></li>
+ <li>Slides and exercises are in Moose's git repo:
+ <br />
+ <span style="font-size:80%; white-space: nowrap">git://jules.scsys.co.uk/gitmo/moose-presentations</span></li>
+ </ul>
+</div>
+
+
<div class="slide fake-slide0">
- <h1>Part 8: A Brief Tour of MooseX</h1>
+ <h1>Bonus: A Brief Tour of MooseX</h1>
</div>
<div class="slide">
with HasCollection => { type => 'Int' };</code></pre>
</div>
-<div class="slide">
- <h1>Questions?</h1>
-</div>
-
<div class="slide fake-slide0">
- <h1>Part 9: Writing Moose Extensions</h1>
-</div>
-
-<div class="slide fake-slide0">
- <h1>The End</h1>
-</div>
-
-<div class="slide">
- <h1>More Information</h1>
-
- <ul>
- <li><a href="http://moose.perl.org/">http://moose.perl.org/</a></li>
- <li><a href="http://search.cpan.org/dist/Moose/lib/Moose/Manual.pod">Moose::Manual</a> and <a href="http://search.cpan.org/dist/Moose/lib/Moose/Cookbook.pod">Moose::Cookbook</a></li>
- <li><a href="irc://irc.perl.org/#moose">irc://irc.perl.org/#moose</a></li>
- <li>mailing list - <a href="mailto:moose@perl.org">moose@perl.org</a></li>
- <li>Slides and exercises are in Moose's git repo:
- <br />
- <span style="font-size:80%; white-space: nowrap">git://jules.scsys.co.uk/gitmo/moose-presentations</span></li>
- </ul>
+ <h1>The End (Really)</h1>
</div>
</div>