Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save belden/3c7c06c33c2679299426 to your computer and use it in GitHub Desktop.
Save belden/3c7c06c33c2679299426 to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl
# this file is broken
use strict;
use warnings;
{
package My::Base;
use Moose;
has foo => (is => 'rw', default => 'foo!');
sub override_me {
my ($class) = @_;
print "Base ($class): override_me\n";
}
}
{
package My::Role;
use Moose::Role;
around 'override_me' => sub {
my ($method, $class) = @_;
print "Role ($class): override_me\n";
$class->$method($class);
};
}
{
package My::Inheritor;
use Moose;
extends 'My::Base';
with 'My::Role';
override 'override_me' => sub { # BOOM this is broken, My::Role gave me an `override_me`
my ($method, $class) = @_;
super();
print "Inheritor ($class): override_me\n";
};
}
My::Inheritor->override_me;
#!/usr/bin/env perl
# this file works fine
use strict;
use warnings;
{
package My::Base;
use Moose;
has foo => (is => 'rw', default => 'foo!');
sub override_me {
my ($class) = @_;
print "Base ($class): override_me\n";
}
}
{
package My::Role;
use Moose::Role;
around 'override_me' => sub {
my ($method, $class) = @_;
print "Role ($class): override_me\n";
$class->$method($class);
};
}
{
package My::Inheritor;
use Moose;
extends 'My::Base';
override 'override_me' => sub { # This works fine...
my ($method, $class) = @_;
super();
print "Inheritor ($class): override_me\n";
};
with 'My::Role'; # ...provided we add the role after we the override
}
My::Inheritor->override_me;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment