Some of the steps you take are somewhat clear, but I'm really wondering about the goal you're trying to reach by these steps. To me, it really seems as if you're trying to duplicate the functionality of Class::Accessor. The usage of Class::Accessor would be:
package MyPackage;
use parent qw(Class::Accessor);
__PACKAGE__->mk_accessors(qw(two three));
package main;
use strict;
my $f = MyPackage->new({three => 3});
$f->two(1);
printf "two=%d, three=%d\n",$f->two, $f->three;
This seems to be your use case, so why reinvent the wheel?