モダンPerl入門感想 第1章

本日購入の「モダンPerl入門」。さっそく読んでみたのでその感想を。


まずは、本当に『モダン』だという事。
7ページ目にして自分にとっての未知数であるMoooooooose!


この1章だけでMooseオブジェクト指向の基本とRoleの概念を理解出来る(ように素人には読める)という充実のボリューム。


Mooseは書き方がそれまでのPerlOOに比べるとかなり独特であり、記述量も少ないので今までも色んな人のソースを見ていたけど、なかなか理解出来ず・・・
やっぱり書いてみなきゃわからんということで、真似して書いてみました。


hello_world.pl

  1 #!/usr/bin/perl 
  2 
  3 use strict;
  4 use warnings;
  5 
  6 use lib './lib';
  7 
  8 use HelloMoose;
  9 use HelloMoose::Date;
 10 
 11 my $hello = HelloMoose->new(param => 'Moooooose' );
 12 $hello->message;
 13 
 14 my $hellodate = HelloMoose::Date->new(param => 'Moooooose' );
 15 
 16 $hellodate->message( scalar(localtime()) );
 17 exit;
 18 


lib/HelloMoose.pm

  1 package HelloMoose;
  2 
  3 use Moose;
  4 
  5 has 'param' => (
  6     is       => 'rw',
  7     isa      => 'Str',
  8     required => 1,
  9 );
 10 
 11 __PACKAGE__->meta->make_immutable;
 12 
 13 no Moose;
 14 
 15 sub message{
 16     my $self = shift;
 17 
 18     print 'Hello '. $self->param ." World \n";
 19 
 20 }
 21 
 22 1;


lib/HelloMoose/Date.pm

  1 package HelloMoose::Date;
  2 
  3 use Moose;
  4 
  5 extends 'HelloMoose';
  6     
  7 override 'message' => sub{
  8 #around 'message' => sub{
  9     my $self = shift;
 10     my $date = shift;
 11 
 12     print 'Hello '. $date .' '. $self->param ." World \n";
 13 
 14 };
 15 
 16 no Moose;
 17 
 18 1; 

以下が実行結果。

% ./hello_world.pl
Hello Moooooose World 
Hello Tue Feb 10 00:10:47 2009 Moooooose World 


という感じで使い方合ってるのかはわかんないけど、動く!!
ただ、これをoverride → aroundに変えるといきなり怒られる。。。

% ./hello_world.pl
Hello Moooooose World 
Can't call method "param" on unblessed reference at lib/HelloMoose/Date.pm line 12.


この辺でいきなりつまづくあたりがいかにも自分らしい訳ですが・・・


もともと、beforeとかoverrideが「継承」というよりは「Hook」のような挙動っていう風に読めたので(継承元のメソッドはそれ単体で実行されるあたりが)、aroundとの違いを色々いじりながら見ようと
思ったら意外なエラー><


こういうのはやっぱりソース見ないとダメかなーと思いつつ、今日は終了。
次の2章もMooseを前提としたデザパタの話になってるので、もうちょい1章でゆっくりしてから進もうと思います。



=====


追記:
やっぱり書いてあるべきところには書いてありました
ググレカスということですねorz