Interface and behaviour of Parallel::DataPipe::run has been changed:

1) input array is now treated as a queue - item is get from it using shift. so in the end it will be empty.

2) in new code input array should be named <input>. You can also use aliases
input_iterator, queue, data.

3) Alias input_iterator if used as an array reference has special behaviour: it does not treat this array as queue but only
reads item from it one by one. In the end it will remain untouched.

Note: This is legacy behaviour and can be changed to unified (treat as a queue) behaviour in next versions

4) in new code you should use <process> as a name for parameter which specifies subroutine to process data.
It also has these aliases:
process_data, process, processor, map

5) parameter <merge_data> becomes optional.
if you don't specify this parameter array with processed data can be received as a subroutine result, i.e.
 @processed = Parallel::DataPipe::run(...);

6) Also You can use this aliseases for <output> parameter:

merge_data, output_iterator, output, output_queue, output_data, merge, reduce

7) The code have been rewritten to make spawn Coro::DataPipe easier.