Mouseの使い方
子モデルと親モデル
親モデル-->子モデルを読み込む
親モデル名がHOGEHOGE
、
子モデル名がfugafuga
とした場合
親->子
use Mouse;
my @CHILD_MODELS = qw(fugafuga)
for my $child (@CHILD_MODELS) {
my $class = Plack::Util::load_class($class, "HOGEHOGE");
$child =~ s/::/_/g;
has decamelize($child) => (
is => "ro",
isa => $class,
default => sub {
my ($self) = @_;
$class->new(foo => $self);
},
lazy => 1,
);
}
no Mouse;
...
# 子モデルをnewするとき
my $fuwafuwa = HOGEHOHE::FUGAFUGA->( foo => $self );
# 子供の子供をnewするとき
my $hogehoge = Model::Hogehoge->new;
my $child = $hogehoge->child
子->親
use Mouse;
has hogehoge => (
is => 'ro',
isa => "HOGEHOGE",
required => 1,
weak_ref => 1,
);
no Mouse;
関数からハッシュや配列を返り値にしたいとき
- 同一モデル内のみならばそのままでも大丈夫
- 他モデルからの呼び出しがあるならリファレンスにしたほうが事故りにくい
- というかハッシュはほぼほぼリファレンスで使う
sub hogehoge {
...
my @result;
...
return \@result;
}
こうするぐらいなら↓
my %result = (
hogehoge => 'fugafuga',
);
return \%result;
こうしたほうがいい↓
my $result = {
hogehoge => 'fugafuga',
};
return $result;
ハッシュをそのまま使う例
my hoge = (
name => "name",
date => dddd,
);
...->new(
id => hurihuri,
%hoge, # 中身がそのまま展開される
);
# ↑のは↓のと同じ
...->new(
id => hurihuri,
name => "name",
date => dddd,
);
データを表示するいろいろ
-
use Data::Dumper;
: リファレンスとかも全部展開して見れる。ただ、全部展開するので、モジュール全体が展開されると訳がわからなくなるので注意 -
use DBIx::QueryLog;
: 実際に投げられたクエリを見れる。ただ全部見れてしまうので、見たいところの近くにprint "-------------------------\n"
をいれておくと見やすい
Data::Dumperの使い方
-
Data::Dumper
で日本語を表示する
use Data::Dumper;
{
package Data::Dumper;
sub qquote { return shift; }
}
$Data::Dumper::Useperl = 1;
DBIx::QueryLogの使い方
-
use DBIx::QueryLog;
と書くと発行されたクエリが出力される - 一部のクエリのみ見たいときは
use DBIx::QueryLog();
DBIx::QueryLog->enable;
# 該当の範囲
DBIx::QueryLog->disable;