所以这让我在过去的半小时里疯狂了.有没有办法让我在一个匿名数组的末尾抓取一个数组切片?我已经尝试过了:
(split(' ',$test_line))[1..$#_]
我已经尝试过了,
(split(' ',$test_line))[1..-1]
但是加剧了这些工作.我真的不希望有一个额外的临时变量实例化到中间数组(我不需要).我真的不想使用丑陋且难以理解的一个班轮(在网上找到一些).真的没有直接的方法来做到这一点吗?
Eri*_*rom 15
列表就是您示例中的内容,无法从最终切片.这主要是因为列表不是Perl中的正确数据结构,而是解释器用于移动数据的更多构造.因此,知道您只能从开头切片列表,您的选择是将其放入数组变量然后切片,更改算法以返回您想要的内容,或者以下内容:
如果要将此值分配给某些内容,则可以undef在不需要的每个插槽中使用:
my (undef, @list) = split ' ' => $test_line;
Run Code Online (Sandbox Code Playgroud)
如果你发布更多代码,我可以修改.
或者,您可以使用函数式编程中的一些工具.一对功能drop和take可能是有用的调整,无需额外的变量列表:
sub take {
my $n = shift;
@_[0..$n-1]
}
sub drop {
my $n = shift;
@_[$n..$#_]
}
Run Code Online (Sandbox Code Playgroud)
然后你的例子就变成了
drop 1, split ' ' => $test_line;
Run Code Online (Sandbox Code Playgroud)
drop 1 也常被称为 tail
sub tail {drop 1, @_}
Run Code Online (Sandbox Code Playgroud)
当然,由于所有这些都很短,如果你想内联它:
sub {shift; @_}->(split ' ' => ...)
Run Code Online (Sandbox Code Playgroud)
当OP说切片时,我想到splice:
@allTheWordsExceptTheFirstTwo = splice @{[split' ', $test_line]}, 2;
@allExceptTheFirstAndLastTwo = splice @{[split' ', $test_line]}, 2, -2;
Run Code Online (Sandbox Code Playgroud)