splice的Perl5.18.2文档有以下示例:
代码语言:javascript复制my(@a) = splice(@_,0,shift);
my(@b) = splice(@_,0,shift);我想知道:如果在@_之前对shift进行评估,那么就会有一个项目太多了,结果就不正确了。因此,在概念上,必须首先执行shift。但是,在C中,它们告诉您永远不应该依赖于实际参数的特定计算顺序(shift修改@_)。
因此,该代码只起作用,因为@_作为引用传递(为了能够更改它),并且在splice可以访问@_之前对shift进行评估。
一点历史
我发现这个例子可以追溯到1996年(至少)和这本书(第219页;第535页上的评论表明它甚至可能来自Perl 4):
WALL,Larry,Tom CHRISTIANSEN und Randal L. SCHWARTZ,1996。编写Perl程序。2.塞巴斯托波尔,CA 95472,美国:O‘’Reilly& Associates公司ISBN 1-56592-149-6