如何将数组切片绑定到原始数​​组,以便对两者进行所有更改?

tjw*_*992 11 arrays perl reference slice

我需要能够将数组切片绑定到原始数​​组,以便对原始数组(包括删除元素)所做的任何更改也将对数组切片进行.有没有办法做到这一点?


以下示例并不适合我想要的方式,但它只是为了证明我想要做的一点.

例:

my @array = 1 .. 10;
my @slice = @array[3 .. 8];

splice @array, 5, 2;

print "ARRAY: ";
print join ', ', @array;
print "\n";

print "SLICE: ";
print join ', ', @slice;
Run Code Online (Sandbox Code Playgroud)

输出:

ARRAY: 1, 2, 3, 4, 5, 8, 9, 10
SLICE: 4, 5, 6, 7, 8, 9
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一种将切片绑定到原始数​​组的方法,因此输出看起来像这样:

ARRAY: 1, 2, 3, 4, 5, 8, 9, 10
SLICE: 4, 5, 8, 9
Run Code Online (Sandbox Code Playgroud)

从原始数组中删除6和7也会将其从数组切片中删除.

我怎样才能实现这样的目标?

Joh*_*Doe -3

use strict;
use warnings;
use Data::Dumper;
my @array = 1..10;
my @slice = \@array[3..8];

splice @array, 5, 2;

print "ARRAY: ";
print join ', ', @array;
print "\n";

print "SLICE: ";
print join ', ', @slice;
Run Code Online (Sandbox Code Playgroud)

输出:

ARRAY: 1, 2, 3, 4, 5, 8, 9, 10
SLICE: SCALAR(0x29dcef0), SCALAR(0x29dcf20), SCALAR(0x29dcf08), SCALAR(0x29dcfb0), SCALAR(0x29dcfc, SCALAR(0x29dd058)
Run Code Online (Sandbox Code Playgroud)

相反,您可以为该项目分配一个零值,而不是删除这些项目(它也会在 中分配一个零值@slice,因为@slice保留了对@array),然后从您身上删除 0 @slice,瞧,您已@slice使用已删除的元素进行了更新