I don't know what's eating my mail, but evidently the attachment never made it out. I tracked down this particular problem and fixed it for the actual case I was using, which was not a PerlHash at all but rather my own custom Match PMC for use in regexes. The attached patch resolves the exact symptom I was seeing, but actually doesn't fix the problem in either the PerlHash nor the Match cases, for different reasons. For PerlHash, P0["foo";3] seems to be interpreted as an iterator access? I hope there's some other way of indicating that. For my Match PMC, I needed to avoid the whole conversion to string anyway.
Still, I won't commit this patch directly, because I have only recently delved into the latest incarnation of the keyed code, and it scares me. Oh boy. What are the odds of this message actually making it out?
Index: t/pmc/perlhash.t =================================================================== RCS file: /cvs/public/parrot/t/pmc/perlhash.t,v retrieving revision 1.44 diff -r1.44 perlhash.t 22c22 < use Parrot::Test tests => 34; --- > use Parrot::Test tests => 35; 693a694,709 > output_is(<< 'CODE', << 'OUTPUT', "Getting PMCs from string;int compound keys"); > new P0, .PerlHash > new P1, .PerlHash > new P2, .PerlInt > set P2, 4 > set P1[0], P2 > set P0["a"], P1 > set I0, P0["a";0] > print "Four is " > print I0 > print "\n" > end > CODE > Four is 4 > OUTPUT >