Seems like a very memory-expensive way of doing things. You're creating per object: a CV, a hash, three arrays, plus a number of scalars roughly equal to the number of lexicals and ops in your closure code.
Indeed. Certainly this is a downside that doesn't make this technique particularly suitable for those circumstances in which you may have to create many such objects. Of course speaking of it I'm more interested in its potential advantages momentarily disregarding memory efficiency issues...