++ed by:

1 non-PAUSE user.

Al Newkirk
and 1 contributors


Bubblegum::Role - Class Component System for Bubblegum via Moo::Role


version 0.26


    package CheckingService;

    use Bubblegum::Role;

    sub deposit {
        my $self = shift;
        my $amount = $self->balance + shift // 0;
        return $self->balance($amount);

    sub withdrawal {
        my $self = shift;
        my $amount = $self->balance - shift // 0;
        return $self->balance($amount);

    package BankAccount;

    use Bubblegum::Class;

    with 'CheckingService';

    has balance => (
        is      => 'rw',
        default => 0

And elsewhere:

    my $account = BankAccount->new(balance => 100000);
    say $account->withdrawal(1500);


Bubblegum::Role provides an object orientated system for defining class components (often referred to as traits or roles) by way of Moo::Role; and activates all of the options enabled by the Bubblegum module. Using this module allows you to define Moo roles as if you were using Moo::Role directly.

    use Bubblegum::Role;

is equivalent to

    use 5.10.0;
    use strict;
    use autobox;
    use autodie ':all';
    use feature ':5.10';
    use warnings FATAL => 'all';
    use English -no_match_vars;
    use utf8::all;
    use mro 'c3';
    use Moo::Role;


Al Newkirk <anewkirk@ana.io>


This software is copyright (c) 2013 by Al Newkirk.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.