| | 35 | |
| | 36 | Using Moo will also do the trick: |
| | 37 | |
| | 38 | {{{#!perl |
| | 39 | use v5.10; |
| | 40 | |
| | 41 | package Padre::Document; |
| | 42 | |
| | 43 | sub new { |
| | 44 | my $class = shift; |
| | 45 | $class = ref $class if ref $class; |
| | 46 | my $self = bless {}, $class; |
| | 47 | $self; |
| | 48 | } |
| | 49 | |
| | 50 | 1; |
| | 51 | |
| | 52 | sub event_key_up { say "event_key_up fired"; } |
| | 53 | |
| | 54 | 1; |
| | 55 | |
| | 56 | package NeedsKeyUpEvent; |
| | 57 | use Role::Tiny; |
| | 58 | requires 'event_key_up'; |
| | 59 | before 'event_key_up' => sub { say q{before event_key_up}; }; |
| | 60 | after 'event_key_up' => sub { say q{after event_key_up}; }; |
| | 61 | 1; |
| | 62 | |
| | 63 | package main; |
| | 64 | my $p = Padre::Document->new; |
| | 65 | Role::Tiny->apply_roles_to_object($p, qw(NeedsKeyUpEvent)); |
| | 66 | $p->event_key_up; |
| | 67 | say "-----"; |
| | 68 | Padre::Document->new->event_key_up; |
| | 69 | }}} |