while ( ($x) = shift @a ) {
...
}
####
DB<170> @a=1..2
=> (1, 2)
DB<171> ( ($x) = shift @a ) ? $x : "false"
=> 1
DB<172> ( ($x) = shift @a ) ? $x : "false"
=> 2
DB<173> ( ($x) = shift @a ) ? $x : "false"
=> undef # true!
##
##
DB<174> @a=1..2
=> (1, 2)
DB<175> ( ($x) = splice @a,0,1 ) ? "$x" : "false"
=> 1
DB<176> ( ($x) = splice @a,0,1 ) ? "$x" : "false"
=> 2
DB<177> ( ($x) = splice @a,0,1 ) ? "$x" : "false"
=> "false"
##
##
The following equivalences hold (assuming "$[ == 0 and $#a >= $i" )
...
shift(@a) splice(@a,0,1)