${ X() } . ${ X() } concat( deref( X() ), deref( X() ), ) ${ X() } . ' ' . ${ X() } concat( concat( deref( X() ), ' ', ), deref( X() ), ) #### use strict; use warnings; use feature qw( say ); {my$x=0; sub X{++$x;\$x}} sub concat { $_[0] . $_[1] } sub deref :lvalue { ${ $_[0] } } # 22 say concat( deref( X() ), deref( X() ), ); # 3 4 say concat( concat( deref( X() ), ' ', ), deref( X() ), );