in reply to Re^2: Preventing unintended list expansion inside hash literals.
in thread Preventing unintended list expansion inside hash literals.
I was working on this from the OP:
"However, when the hash table is empty, we just call return."
That appears to be confirmed in his code example:
... %$hash_ref or return; # just return ... $key; # or last line in sub returns a scalar
So, %some_hash is ending up as one of:
( key1 => ($val1), key2 => ($val2) ) ( key1 => (), key2 => () ) ( key1 => ($val1), key2 => () ) ( key1 => (), key2 => ($val2) )
These will be flattened to:
( 'key1', $val1, 'key2', $val2 ) ( 'key1', 'key2' ) ( 'key1', $val1, 'key2' ) ( 'key1', 'key2', $val2 )
The first is fine; the second is what the OP had a problem with; the last two are problematic but, assuming he's using warnings, should generate an "Odd number of elements in hash assignment" diagnostic (from perldiag).
I don't think the "comma operator returns the right-most value in the list" comes into play in any of these scenarios: all lists are either empty or only have one value.
Am I missing something with your "return (17, 42);" example?
— Ken
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Preventing unintended list expansion inside hash literals.
by Athanasius (Archbishop) on Jan 05, 2017 at 13:00 UTC |