The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package AfterAwhileRole;
use Reflex::Role;

# TODO - Is att_name really needed?
attribute_parameter att_awhile => "awhile";
attribute_parameter att_name   => "name";
callback_parameter  cb         => qw( on att_name done );

role {
	my $role_param = shift;

	my $att_awhile = $role_param->att_awhile();
	my $cb_done    = $role_param->cb();

	requires $att_awhile, $p->att_name(), $cb_done;

	sub BUILD {}
	after BUILD => sub {
		my $self = shift;
		sleep($self->$att_awhile());
		$self->$cb_done();
	};
};

1;