%記法

Rubyの%記法は便利だ。正規表現に/を含めたいときとかはこれが無いとやってられない。
これは

%r<\d{4}/\d{2}>

というふうに使うわけだけど、%rの次の記号(上の例では<>)は何が使えるのだろうか。
マニュアルには

改行を含めた任意の非英数字を使うことができます。

とある。任意の非英数字って? 実験してみる。

$ ruby -c
%|HOGE|
%\HOGE\
%_HOGE_
%~HOGE~
%*HOGE*
%]HOGE]
^D
Syntax OK

おお通ってしまった。最後のが通るのはちょっと意外。
ここで ruby のソースを見てみる。こういうのは lexer を見ればわかるはず。parse.yの yylex 関数を見る。すると、

term = nextc();
if (ISALNUM(term) || ismbchar(term)) {
    yyerror("unknown type of %string");
    return 0;
}

とある。つまり、実際にアルファベットと数字意外は何でも使えるということだ。
例えば、

% HOGE 

なんてのも文字列リテラルになる。スペースを区切り文字として使えるなんて凄い。使わないけど。
また、こんなこともできる。

$ od -c y.rb
0000000   p   u   t   s       %  \0   h   o   g   e  \0  \n
0000015
$ ruby y.rb
hoge

ヌル文字も使えてしまう。素敵。