People would be a bit surprised to find $hash{key} returning a list. I like the fact that not even tied hashes can break this expectation. I don't think you should use $hash{key} as an all-purpose replacement for funct("key"). If you are going to provide your functionality via a "hash-like" interface, then I think you should make it act like a hash; which means that it can only take a single string as input and can only return a single value.
Next you'll be wanting to tie scalars such that $x returns a list!!
If you want to return multiple values, then you'll have to return a reference to an array.
What I did with this was that I allowed the user to specify whether they wanted a list (er, ref to array) for each hash:
(that isn't really a suggested interface, just a quick hack at a way to describe what I'm talking about). So each user could decide whether they wanted to write code like:tied(%hash)->WantList("always"); tied(%hash)->WantList("never"); tied(%hash)->WantList("forMultiples");
- tye (but my friends call me "Tye")$first= $hash{key}[0]; # or $first= $hash{key}; # or $values= $hash{key}; $first= ref($values) ? $values->[0] : $values;
In reply to (tye)Re: wantarray and Tied Hashes
by tye
in thread wantarray and Tied Hashes
by davorg
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |