LoginSignup
5
4

More than 5 years have passed since last update.

Perl関係のメモ

Last updated at Posted at 2016-05-29

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;
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4