2014年10月31日金曜日

【Perl】Mooseの使い方

Mooseとは簡単にクラスを作ることができるモジュールのようだ。newとかは実装不要。

package Foo;
use Moose;
extends 'FooParent'; #これで親モジュールを継承できる

has name => { #アクセサを定義する関数
  is =>   'rw', #rwは読み書きができ、roは読み取りだけ($Foo->name,$Foo->name("hoge"))
  isa => 'Str', #型の指定を行う
  default => "Bob", #デフォルト値を指定できる。sub {Hoge->config}のようにサブルーチンも可
  required => 1, #必須パラメータの場合は1を指定する
}

sub hoge { #メソッドの定義は普通に行う
  print "My name is".shift->name."\n";
}

参考:
http://perldoc.jp/docs/modules/Moose/Manual.pod

【Perl】AUTOLOADの使用例

定義されていない関数を呼び出すとこのAUTOLOADというのが呼び出される便利な関数。
cpanのモジュールを拡張して独自モジュールを作るような使い方ができる。

Foo.pm
#########################################################
package Foo;$

use strict;
use warnings;


sub AUTOLOAD {
>   our $AUTOLOAD;
>   my (@args) = @_;
>   print "autoload start..function_name:$AUTOLOAD\n";
>   print "argument is (".join(',',@args).")\n";
}

1;
#########################################################

$ perl -MFoo -e 'Foo::test("a","b","c")';
autoload start..function_name:Foo::test
argument is (a,b,c)

参考:
サンプルコードによるPerl入門 サブルーチンのオートロード AUTOLOAD
http://perldoc.jp/docs/perl/5.8.0/AutoLoader.pod