in reply to Re: Flattening out arguments to splice
in thread Flattening out arguments to splice

splice ARRAY,OFFSET,LENGTH,LIST

You forgot the fourth argument: 'LIST'.

my ($list, $offset, $length, @list) = @_;

Replies are listed 'Best First'.
Re^3: Flattening out arguments to splice
by AnomalousMonk (Archbishop) on May 30, 2018 at 02:39 UTC

    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:  <%-{-{-{-<

Re^3: Flattening out arguments to splice
by AnomalousMonk (Archbishop) on May 30, 2018 at 01:58 UTC

    I haven't tested this, but I believe that in tybalt89's code (and in your OP code), because the splice is operating on a copy of the  $list array reference argument, so a fourth argument  LIST would be assigned to the lexical array  @copy and then almost immediately lost along with that array.

    Do you mean that you want your function to operate on the external referent of the  $list array reference?


    Give a man a fish:  <%-{-{-{-<