複数行での/./と/$/の扱い

以下の2点の各処理系での調査結果。
1.任意の1文字/./に改行は含まれるか?→"\n"=~/./でテスト。
2.行末/$/は途中の改行も含まれるか?→"1\n2"=~/1$/でテスト。

Perlの場合

テスト1 テスト2
マッチする "\n"=~/./s "1\n2"=~/1$/m
マッチしない "\n"=~/./ "1\n2"=~/1$/

デフォルトでは/./にマッチしない。s修飾子を使うとマッチする。
デフォルトでは/1$/にマッチしない。m修飾子を使うとマッチする。

JavaScriptの場合

テスト1 テスト2
マッチする "\n".match(/(?:\n|.)/) "1\n2".match(/1$/m)
マッチしない "\n".match(/./) "1\n2".match(/1$/)

常に/./にマッチしない。マッチさせるには(?:\n|.)等を使う?
デフォルトでは/1$/にマッチしない。m修飾子を使うとマッチする。

Rubyの場合

テスト1 テスト2
マッチする "\n"=~/./m "1\n2"=~/1$/
マッチしない "\n"=~/./ "1\n2"=~/1\Z/

デフォルトでは/./にマッチしない。m修飾子を使うとマッチする。
常に/1$/にマッチする。なのでマッチさせたくないときは/\Z/を使う。
Perl,JavaScriptとはm修飾子の意味が違うので注意。

Gaucheの場合

テスト1 テスト2
マッチする (#/./ "\n") (#/1(?:\n|$)/ "1\n2")
マッチしない (#/[^\n]/ "\n") (#/1$/ "1\n2")

常に/./にマッチする。マッチさせたくないときは/[^\n]/等を使う?
常に/1$/にマッチしない。マッチさせるには(?:\n|$)等を使う?
指定出来るのはi修飾子のみでs修飾子,m修飾子はない。

Haskellの場合

テスト1 テスト2
マッチする matchRegex (mkRegex ".") "\n" matchRegex (mkRegexWithOpts "1$" True True) "1\n2"
マッチしない matchRegex (mkRegexWithOpts "." True True) "\n" matchRegex (mkRegex "1$") "1\n2"

デフォルトで/./にマッチする。マッチさせたくないときはmkRegexWithOptsの第1引数をTrueにする。
デフォルトでは/1$/にマッチしない。マッチさせるためにはmkRegexWithOptsの第1引数をTrueにする。
あれ?/./と/1$/を両方マッチさせる指定は出来ない?
ちなみに、mkRegexWithOptsの第2引数はi修飾子の逆の意味(Falseのときに大小文字の違いを無視する)

追記

正規表現修飾子の意味 修飾子 意味
i 大小文字の違いを無視する
s シングルラインモードにする(.が改行にマッチする)
m マルチラインモードにする(^と$が改行の直前直後にマッチ)
x 拡張表記を許可する

http://www.kt.rim.or.jp/~kbk/regex/regex.html#OPT1

なるほど、sはシングルラインモード、mはマルチラインモードの略だったのか。
やっぱりRubyのm修飾子の意味の方が逆な気がする…