при сомнениях use diagnostics;
$ perl -Mdiagnostics -le " splice @ARGV, -1 ,0 "
Modification of non-creatable array value attempted, subscript -1 at -e line 1 (#1)
(F) You tried to make an array value spring into existence, and the
subscript was probably negative, even counting from end of the array
backwards.
Uncaught exception from user code:
Modification of non-creatable array value attempted, subscript -1 at -e line 1.
at -e line 1.
$ perl -Mdiagnostics -le " splice @ARGV, -1 ,0 " argv now not empty
Я сомневаюсь, что вы хотите использовать отрицательные смещения, я думаю, что вы хотите использовать смещение 0 и размер массива минус один (также известный как последний индекс)
$ perl -le " print for splice @ARGV, 0, $#ARGV-1 " a b c
a
по электронной почте Ой. $ # ARGV - последний индекс, а не $ # ARGV -1, поэтому
$ perl -le " print for splice @ARGV, 0, $#ARGV " a b c
a
b
но если вам все еще нужна некоторая арифметика, вы можете использовать @ARGV, потому что в скалярном контексте это размер массива
$ perl -le " print for splice @ARGV, 0, @ARGV-1 " a b c
a
b
Побочный эффект использования неотрицательных смещений со сращиванием? Он не умирает, когда массив пуст
$ perl -le " print for splice @ARGV, 0, 10 "