in reply to Ambiguity of @{ shift }

It is ambiguous. You might mean shift(), or you might mean @shift. The construct @{ shift } could mean either thing. See, for example:

use strict; use warnings; $, = "\t"; my @foo = qw/this that/; print @{ foo }, "\n"; my @shift = qw/those these/; print @{ shift }, "\n"; mysub( [qw/them theirs/] ); sub mysub { print @{ shift }, "\n"; print @{ shift() }, "\n"; }

Dave