New splicer function operates on external referent (although I'm not sure what this gets you: it's almost exactly like splice) (update: needs Perl 5.10+ for // operator):
c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "use 5.010; ;; sub my_splicer { my ($ar, $offset, $len, @list) = @_; $offset //= 0; $len //= @$ar - $offset; return splice @$ar, $offset, $len, @list; } ;; use constant TEST => qw(one two three four five six seven eight); ;; my $ar; my @spl; my @args; ;; $ar = [ TEST ]; @args = (); @spl = my_splicer($ar, @args); dd \@spl, $ar; ;; $ar = [ TEST ]; @args = (2); @spl = my_splicer($ar, @args); dd \@spl, $ar; ;; $ar = [ TEST ]; @args = (2, 3); @spl = my_splicer($ar, @args); dd \@spl, $ar; ;; $ar = [ TEST ]; @args = (2, 3, qw(FOO BAR)); @spl = my_splicer($ar, @args); dd \@spl, $ar; " ( ["one", "two", "three", "four", "five", "six", "seven", "eight"], [], ) ( ["three", "four", "five", "six", "seven", "eight"], ["one", "two"], ) ( ["three", "four", "five"], ["one", "two", "six", "seven", "eight"], ) ( ["three", "four", "five"], ["one", "two", "FOO", "BAR", "six", "seven", "eight"], )
Update: Note this code will also work as expected with something like
@args = ($ar, 2, 3, qw(FOO BAR));
@spl = my_splicer(@args);
Give a man a fish: <%-{-{-{-<
In reply to Re^3: Flattening out arguments to splice
by AnomalousMonk
in thread Flattening out arguments to splice
by Oberon
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |