Простенький пример использования Moo

Блог им. akkerman
Неожиданно выяснил, что документации по модулю Moo, делающему возможным «ООП с человеческим лицом» в Perl практически нет, а та, что есть — вообще почему-то платная (?! я сам был удивлён весьма).

Для того, чтобы хоть немного ликвидировать столь странный «пробел» я написал по итогам нескольких часов «изучения» Moo маленький пример, которым и хочу с вами, мои дорогие читатели, поделиться:

Пакет Test::GaryFisher (Gary Fisher — это марка велосипедов)

package Test::GaryFisher;
use Moo;
 
my $color='grey';

sub goHome {
 print 'We are singing in the rain...'."\n"; 
}

my $curColor='blue';
my @AppliColors=('red', 'black', 'blue', 'grey');
my $rxAppliColors='(?:'.join('|',@AppliColors).')';
has 'color' => (  
 'is' => 'rw',
 'isa' => sub { die 'Color is not conform to standart colors of GaryFisher brand' unless $_[0] =~ m/^${rxAppliColors}$/o },
 'coerce' => sub {
   print 'Please wait, we are painting your bike to the '.$_[0].' color...'."\n" unless $curColor eq $_[0];
   $curColor=$_[0]
                 },
 'writer'=>'set_color', 
 'default' => $curColor,
);
 

sub PaintToRandomColor {
 my $slf=shift;
 $slf->set_color($AppliColors[int(rand scalar(@AppliColors))]);
}

1;


Код, использующий пакет:

#!/usr/bin/perl
use Test::GaryFisher;
  
my $bike=Test::GaryFisher->new;

print 'Bike color was '.$bike->color."\n";
$bike->color('red');
print 'And now bike color is '.$bike->color."\n";
print 'Lets paint to random color!'."\n";
$bike->PaintToRandomColor;
print 'Random bike color is '.$bike->color."\n";
$bike->goHome;

3 комментария

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.