You're kind of stuck here.
- Perl won't let you assign to the non-lvaluable thing you tried in your original example.
- You'll have a lot of trouble doing something like
(@a, %h) = anything()
because @a will always get everything that is returned. (An artifact of the way perl handles nested list contexts.)
- So that leaves you with something like
($href, $aref) = (@{&foo})
which is basically what you came up with on your own.
Once you've got the references, you can dereference them one at a time, as you are doing, but good luck trying to assign (copy) them all to "real" arrays/hashes at once because of that second point above.
Anyone who knows any better than I do care to comment?
---
"I hate it when I think myself into a corner."
Matt Mitchell