Acme-Keyakizaka46
view release on metacpan or search on metacpan
lib/Acme/Keyakizaka46.pm view on Meta::CPAN
package Acme::Keyakizaka46;
use strict;
use warnings;
use Carp qw(croak);
use DateTime;
our $VERSION = '0.0.1';
my @members = qw(
NijikaIshimori
YuiImaizumi
RinaUemura
RikaOzeki
NanaOda
MinamiKoike
YuiKobayashi
FuyukaSaito
ShioriSato
ManakaShida
YuukaSugai
MiyuSuzumoto
NanakoNagasawa
MizuhoHabu
AoiHarada
YurinaHirate
AkaneMoriya
NanamiYonetani
RikaWatanabe
RisaWatanabe
NeruNagahama
MaoIguchi
SarinaUshio
MemiKakizaki
YukaKageyama
ShihoKato
KyokoSaito
KumiSasaki
MireiSasaki
ManaTakase
AyakaTakamoto
MeiHigashimura
MikuKanemura
HinaKawata
NaoKosaka
SuzukaTomita
AkariNibu
HiyoriHamagishi
KonokaMatsuda
ManamoMiyata
MihoWatanabe
);
sub new {
my $class = shift;
my $self = bless {members => []}, $class;
$self->_initialize;
return $self;
}
sub team_members {
my ($self, $type, @members) = @_;
@members = @{$self->{members}} unless @members;
$type = $type ? $type : '';
if ($type eq 'kanji') {
return grep {$_->team eq 'kanji'} @members;
}
elsif ($type eq 'hiragana') {
return grep {$_->team eq 'hiragana'} @members;
}
return @members;
}
sub sort {
my ($self, $type, $order, @members) = @_;
@members = $self->team_members() unless @members;
if ($order eq 'desc') {
return sort {$b->$type <=> $a->$type} @members;
} else {
return sort {$a->$type <=> $b->$type} @members;
}
}
sub select {
my ($self, $type, $num_or_str, $operator, @members) = @_;
@members = $self->team_members() unless @members;
if ($type eq 'center') {
$self->_die('too many args...')
if ($num_or_str || $operator);
return grep {$_->{name_en} eq 'Yurina Hirate'} @members;
}
else {
$self->_die('invalid operator was passed in')
unless grep {$operator eq $_} qw(== >= <= > < eq ne);
my $compare = eval "(sub { \$num_or_str $operator \$_[0] })";
return grep { $compare->($_->$type) } @members;
}
}
sub _initialize {
my $self = shift;
for my $member (@members) {
my $module_name = 'Acme::Keyakizaka46::'.$member;
( run in 1.374 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )