Class::InsideOut

今の実装だとわりとオーバースペックなモジュール。どうせ自分で使うだけだから、ハッシュリファレンスに何でも入れておいても誰も外から触らないし、シングルスレッドでしか走らせないから、複数インスタンスが同時に存在することもないし。けどせっかくだからこれを使って実装してみる。以下、書きかけのコード断片。

package Tangerine::Plugin::Evangeline::Image;

use strict;
use warnings;
use version; our $VERSION = qv('0.1.0');

use Class::InsideOut qw/private register id/;
use Digest;
use Image::Magick;

use Tangerine::Core::Carp qw/croak/;

private _im => my %_im;
private _file => my %_file;

sub new {
    my $self = register shift;
    my %arg = @_;
    $_file{id $self} = $arg{file};
    $_im{id $self} = Image::Magick->new or croak "constract: $!";
    my $err = $_im{id $self}->Read($arg{file});
    croak $err if $err;
    return $self;
}

sub get {
    my $self = shift;
    my @attrs = @_;
    return $_im{id $self}->Get(@attrs) or croak $!;
}

1;