my $x = shift ;
sub foo() { my $x = shift; my $y = shift; my $z = shift; # do something }
这里的混乱是,似乎shift不是作为参数传递数组。事实上,它被隐式传递“default”数组,它在子程序中是@_,或者在子程序之外是@ARGV。