I absolutely agree with that too. I just interpreted a different intent:
for (tie @ary, "My::Class", "some", "el", "ems") { ... } # NOPE
# This makes for() only loops over a single value, the tied object.
If the intention was to iterate over the 'object' then a possible solution would be to use a de-reference. However I felt this would be a bad idea and decided to point this out.
But it doesn't matter, everyone has proposed solutions that are much better. Esp. the solution hdb has found now using the lvalue sub is absolutely fantastic.