%記法
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
ヌル文字も使えてしまう。素敵。