I think the problem is with your use of
apply_roles_to_object. I did a little test and if you change the method to
apply_roles_to_package it works they way you expect:
print "Using apply_roles_to_object\n";
my $test_1 = File->new;
print "test_1->render\n";
$test_1->render;
Role::Tiny->apply_roles_to_object($test_1, 'Draw');
print "test_1->render after apply_roles_to_object\n";
$test_1->render;
print "\n\n";
print "Using apply_roles_to_package\n";
my $test_2 = File->new;
print "test_2->render\n";
$test_2->render;
Role::Tiny->apply_roles_to_package('File', 'Draw');
print "test_2->render after apply_roles_to_package\n";
$test_2->render;
Output:
Using apply_roles_to_object
test_1->render
This is package 'File' - render
test_1->render after apply_roles_to_object
This is package 'Draw' - render
Using apply_roles_to_package
test_2->render
This is package 'File' - render
test_2->render after apply_roles_to_package
This is package 'File' - render