で、実はさっきのperlのsplitの謎が解けたのは、String.split()のjavadocを読んだのがきっかけです。String.split()もLimitを省略(又は0)すると空の文字列を破棄しますが、わかりやすくそれが明記されています。サンプルの部分に、負値を与えた場合の挙動もはっきりと定義されており、末尾の空文字列も返して欲しい時には負値*1を渡すといいことが分かります。
この、LIMITに-1を渡した場合の挙動はperlでも同じでした。先のコードで、末尾の空文字列も取りたい場合は、
print '[', join(', ', split(qr(/), $csv_string, -1) ), "]\n";
とするといいでしょう。
2009/1/30補足
If LIMIT is negative, it is treated as if an arbitrarily large LIMIT had been specified.
2011/12/5追記
JSでは挙動が違うらしい。
*1:"a,b,c,".split(",", -1)みたいに-1を与えるのが妥当でしょう