in reply to Surprised by split

You are using a string literal rather than a regular expression literal, so the \ gets removed by the double-quoted string handling code before it gets passed to the regex compiler. Use a regex literal instead:
$ perl -wle 'print join ",", split /\|/, "abc|def"' abc,def $

Dave.