On 29/01/2013 11:36, gvim wrote:
On 29/01/2013 02:33, Mike Stok wrote:
Have you tried reading

   perldoc -f scalar

Hope this helps,

Mike


Yes, I'm aware of the scalar function but still not clear why assigning $r->method as a hash value doesn't invoke a scalar context in the first place.

The code

return { passed => $passed, valid => $r->valid, missing => $r->missing, invalid => 
$r->invalid, unknown => $r->unknown };

is equivalent to this

return { 'passed', $passed, 'valid', $r->valid, 'missing', $r->missing, 'invalid', 
$r->invalid, 'unknown', $r->unknown };

The bit inside the curly braces is not any kind of magical "hash constructor" but a list, plain and simple.

None of the values in that list "know" that they will eventually become a hash key or a hash value.

Everything in there is just in list context. So your method calls are in list context.

The curly braces then take the elements of that list, in pairs, and then treat each pair as (key, value) to build a hash.

(This links to a common discussion (linked in turn with the old 'return undef;' vs. 'return;' argument) about whether or not functions should behave differently depending on scalar and list context.)

Regards,

Bill

Reply via email to