in reply to split unless escaped

Hmm, besides the clever ?:, you can also avoid the splice:
perl -e '$_ and push @v, $_ for (split /(?<!\\)(\\\\)*&/, "a=1&b=2\\&3 +&c=4"); print join "\n", @v'
-anders