Ah, see, now that's a slightly different question now. You need all the possible functions being passed in to have the same signature, which means that you can't just pass in references to push, unshift and splice - since splice has a different signature than push and unshift.
Since you need to come up with a common signature anyway, then using closures is probably the easiest way:
sub do_stuff
{
my $determine_what_to_do = shift;
foreach (@some_other_list)
{
my $func = $determine_what_to_do->($_);
$func->($_) if $func;
}
}
And then you can have a determination function that does the lookup on what to do with each line - if source filters were reliable, Switch probably would be good here. The perl6 match operators will probably be even better. Here you can return a closure that only takes the item to be pushed, unshifted, spliced, whatever, and closes on the rest of the parameters (which array to push, etc.).
Or, your call to the function could be:
$func->(\@array, $_);
if the same array is always used anyway. Again, though, the splice function needs more parameters, which will need to be closed on somehow.
| [reply] [d/l] [select] |
Sorry. Perhaps (most likely?) Perl 6 will allow you to do this. You can fake it with:
my $push = sub { my $aref = shift; push @$aref, @_ };
but that's probably not the cool solution you sought.
| [reply] [d/l] |