foreach (@_) {# 此时@_已经移出(shift)一个值$a = pop @_; #此时@_又pop出来一个值,所以你拿到的只有数组里从后往前一半的数。}另外,my @list定义在循环里面也不对,每次都初始化了。