in reply to declaring accessor methods from a list

You can't make dynamically named subroutines like that. You'll have to assign to a typeglob:
*$i = sub { ... }
Note that this will only work when not using strict 'refs'.

update: see also the Symbol table section in perlmod.