I think the general rule of thumb is, "don't." As in, don't modify parameters to a function in the line that calls the function in such a way that could be confusing.
foo($i++); # ok
foo(++$i); # ok
foo($i,$i++); # not ok
foo($i++,$i); # not ok
foo($i++,++$i); # WTF?
If perl defined this, it would be one of very few languages that did so. And thus would still be confusing, IMO. It's not really that much extra work to avoid it. Use
do if you have to:
my $flubber = do {
my @args;
push @args, $i++;
push @args, ++$i;
foo(@args)
}; # well defined: $_[1] == $_[0]+2