Список, который есть у вас в вашем примере, нельзя разрезать с конца.Это в основном потому, что списки - это не правильные структуры данных в Perl, а скорее конструкция, которую интерпретатор использует для перемещения данных.Поэтому, зная, что вы можете только нарезать список с самого начала, вы можете либо поместить его в переменную массива, а затем нарезать, изменить свой алгоритм, чтобы он возвращал то, что вы хотите, или следующее:
Если выприсвоив это значение чему-либо, вы можете использовать undef
в каждом слоте, который вам не нужен:
my (undef, @list) = split ' ' => $test_line;
Если вы добавите еще какой-то код, я могу изменить.
В качестве альтернативы, вы можете использоватьнекоторые инструменты из функционального программирования.Пара функций drop
и take
может быть полезна для изменения размера списка без дополнительных переменных:
sub take {
my $n = shift;
@_[0..$n-1]
}
sub drop {
my $n = shift;
@_[$n..$#_]
}
, и тогда ваш пример становится
drop 1, split ' ' => $test_line;
drop 1
такжеобычно называется tail
sub tail {drop 1, @_}
и, конечно, поскольку все они настолько короткие, если вы хотите вставить их в строку:
sub {shift; @_}->(split ' ' => ...)