It seems to me that delete doesn't work on stashes (%A:: in your case), only on hashes. Use either $A::bbb = undef as suggested above, or { local $A::bbb = 3 }
But actually, this is a good point: why doesn't it work on stashes? That's a nice feature.
Comment on Re: deleting glob does not undef values?