PDL::Dataflow module contains a description of the dataflow philosophy.
perldl> $a = zeroes(10);
perldl> $b = $a->slice("2:4:2");
perldl> $b ++;
perldl> print $a;
[0 0 1 0 1 0 0 0 0 0]
Dataflow is very experimental. Many features of it are disabled for 2.0, particularly families for one-directional dataflow. If you wish to use one-directional dataflow for something, please contact the author first and we'll work out how to make it functional again.
Two-directional dataflow (which implements ->slice() etc.) is fully functional, however. Just about any function which returns some subset of the values in some piddle will make a binding so that
$a = some piddle
$b = $a->slice("some parts");
also changes the corresponding element in $a. $b has become effectively a window to some subelements of $a. You can also define your own routines that do different types of subsets. If you don't want $b to be a window to $a, you must do
$b = $a->slice("some parts")->copy;
The copying turns off all dataflow between the two piddles.
The difficulties with one-directional dataflow are related to sequences like
$b = $a + 1;
where there are several possible outcomes and the semantics get a little murky.