Acme-HidamariSketch
view release on metacpan or search on metacpan
lib/Acme/HidamariSketch.pm view on Meta::CPAN
package Acme::HidamariSketch;
use 5.008005;
use strict;
use warnings;
use utf8;
our $VERSION = "0.05";
my @characters = qw(
Yuno
Miyako
Hiro
Sae
Nori
Nazuna
Matsuri
Riri
Misato
);
my %year = (
before => 0, # åå¹´ (ãã®å
¥å¦å)
first => 1, # 1å¹´ç® (ãã®å
¥å¦)
second => 2, # 2å¹´ç®
third => 3, # 3å¹´ç® (ç¾å¨)
);
my $SINGLETON;
sub new {
if ($SINGLETON) {
return $SINGLETON;
}
else {
my $class = shift;
my $SINGLETON = bless {characters => [], year => 'third'}, $class;
$SINGLETON->_init;
return $SINGLETON;
}
}
sub characters {
my ($self, %options) = @_;
return @{$self->{characters}};
}
sub apartment {
my $self = shift;
my $module_name = 'Acme::HidamariSketch::Apartment';
eval "require $module_name";
my @tenant;
for my $character (@{$self->{characters}}) {
if (defined $character->{room_number}->{$self->year}) {
push @tenant, $character;
}
}
return $module_name->new({
tenants => [@tenant],
year => $self->{year},
});
}
sub year {
my $self = shift;
if (@_) {
my $year = shift;
for my $key (keys %year) {
$self->{year} = $year if ($key eq $year);
}
}
return $self->{year};
}
sub _init {
my $self = shift;
for my $character (@characters) {
my $module_name = 'Acme::HidamariSketch::' . $character;
eval "require $module_name;";
push @{$self->{characters}}, $module_name->new;
}
return 1;
}
1;
__END__
( run in 0.850 second using v1.01-cache-2.11-cpan-800906f7e73 )