c:\@Work\Perl\monks>perl -wMstrict -le
"use Data::Dumper;
;;
my @A1 = qw(a b c d e f g);
my $n = 2;
my @A2 = splice @A1, -$n;
;;
print Dumper [\@A1, \@A2];
"
$VAR1 = [
[
'a',
'b',
'c',
'd',
'e'
],
[
'f',
'g'
]
];
(If $n is greater than the number of elements of the array, a run-time error is thrown.)
Update: Actually, the negative offset approach might be significantly better because it throws an error whenever $n is greater than the number of array elements, whereas the
splice @A1, @A1-$n, $n
expression produces a silent, possibly unexpected/undesirable aliasing behavior for some values of $n > @array and doesn't throw an error until $n is greater than twice the number of elements of the array.
c:\@Work\Perl\monks>perl -wMstrict -le
"use Data::Dump qw(dd);
;;
my @A1 = qw(a b c d e f g);
my $n = 14;
my @A2 = splice @A1, @A1-$n, $n;
;;
dd \@A1, \@A2;
"
([], ["a" .. "g"])
c:\@Work\Perl\monks>perl -wMstrict -le
"use Data::Dump qw(dd);
;;
my @A1 = qw(a b c d e f g);
my $n = 15;
my @A2 = splice @A1, @A1-$n, $n;
;;
dd \@A1, \@A2;
"
Modification of non-creatable array value attempted, subscript -8 at -
+e line 1.
Give a man a fish: <%-{-{-{-<
|