in reply to (Expert) Splicing a slice
Close, but no cigar:
use strict; use warnings; sub slice_ref { return \@_; } my @foo = (1..5); our @bar; *bar = slice_ref @foo[0..2]; print('foo: ', join(', ', @foo), "\n"); print('bar: ', join(', ', @bar), "\n"); print("\n"); $bar[0] = 'a'; print("After changing bar0:\n"); print('foo: ', join(', ', @foo), "\n"); print('bar: ', join(', ', @bar), "\n"); print("\n"); splice(@bar, 1, 0, 6); print("After inserting into bar:\n"); print('foo: ', join(', ', @foo), "\n"); print('bar: ', join(', ', @bar), "\n"); print("\n"); $bar[0] = 'b'; print("After changing bar0:\n"); print('foo: ', join(', ', @foo), "\n"); print('bar: ', join(', ', @bar), "\n"); __END__ output ====== foo: 1, 2, 3, 4, 5 bar: 1, 2, 3 After changing bar0: foo: a, 2, 3, 4, 5 bar: a, 2, 3 After inserting into bar: foo: a, 2, 3, 4, 5 Want: a, 6, 2, 3, 4, 5 bar: a, 6, 2, 3 After changing bar0: foo: b, 2, 3, 4, 5 The magic is still there bar: b, 6, 2, 3 on individual elements.
By the way, I think you asking for a solution that should not be used in a "heavily-used CPAN module".
Update: Fixed bug in slice_ref, and simplified it. Added comment at bottom.
|
|---|