A little background followed by a bunch of questions.
I am working on old shoddy code written by someone else who was an
administrator not a developer, yikes, yeh I know bad place to be, but
hey they are paying me for this.
I have a function that currently returns an array when it should be
returning a hash, this function is called in a lot of places so
rewriting the code where it is called is not really feasible.
Unfortunately we also have new code that is being created that will need
to use this function as well before we can rewrite the whole damn system
(which is also in planning thank <insert higher being here>).
As an intermediary I happened upon wantarray as a way to change the
implementation of the function without changing the current design spec,
aka still allow the function to return an array for the old calls but
allow new code to use a better method. After going through a couple of
iterations I ended up returning an array when wantarray is true and a
hash reference when it is false.
Question 1: Is there a way to differentiate the return context between
"array context" and "hash context" from what I have seen there is just
one big "list context"??
This last point leads to,
Question 2: How does Perl (and can I therefore some how do it too) know
that sometimes a hash in list context is a hash, and sometimes it isn't?
i.e. ($return, $return1, %hash) = &sub_that_returns_2_vars_and_a_hash
This maintains the %hash correctly from when the sub returns a hash
(naturally after popping off the first key/value pair).
Question 3: What defines "void context"?? For instance, I realize that
calling a sub by itself, aka,
&call_sub_like_this;
is "void" context, however I am unclear what the following is (or how
Perl determines it, though this is less important for now if it will
make my head hurt),
if ( &call_sub_like_this ) {
do something cool here....
}
Is this void because I am not assigning the value to something? It seems
that the value is needed to determine the true or falseness of the
conditional, if this is not void does is it automagically scalar
context, or does Perl decide based on other factors, aka what I am
returning or the operator preceding the func call, etc.?
Question 4: Is anyone still reading this far down?? ;-)
Question 5: In my function I need to check the return context multiple
times, is it better form or more efficient to continue to call wantarray
several times (5-8) or to assign the value of wantarray early in the
function and then test the variable that holds its value? Obviously
this may be stylistic, but I am still curious.
Question 6: I realize the amount of info I have provided is somewhat
limited, but is the best way to go in the situation as I explained
above, where I pass a hashref when in scalar context and an array in
list context, or is there a better solution, possibly one that will
allow me to pass a hash directly rather than the reference? (personally
I don't mind working with references but some of our "junior" team
members are still intimidated by them).
Any other comments are appreciated......
Thanks,
http://danconia.org
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]