http://qs321.pair.com?node_id=759628


in reply to Why does foo() evaluate in array context in "${\foo()}"?

The way I see it, ${ EXPR1 } forces scalar context and then performs a scalar dereference on EXPR1.

The backslash \( EXPR2 ) forces list context on EXPR2 and returns a list of references.

By combining the two, you have \foo() returning a list of one reference to scalar 10. Then, ${ (\10) } returns the scalar dereferenced 10.

FYI, there's a catch to using the \( ) syntax for @arrays:
> perl -de '' DB<1> x @array = (1 .. 3) 0 1 1 2 2 3 DB<2> x \(@array, (@array)) 0 ARRAY(0x844cad8) 0 1 1 2 2 3 1 SCALAR(0x844e420) -> 1 2 SCALAR(0x844ca3c) -> 2 3 SCALAR(0x844cb80) -> 3 DB<3> x \(@array) 0 SCALAR(0x844e420) -> 1 1 SCALAR(0x844ca3c) -> 2 2 SCALAR(0x844cb80) -> 3 DB<4> x \(@array, ()) 0 ARRAY(0x844cad8) 0 1 1 2 2 3

Update: BTW, same catch applies to %hashes.