読者です 読者をやめる 読者になる 読者になる

シングルクォートと%q記法のバックスラッシュの動作について。

シングルクォートと%q記法内のバックスラッシュは、バックスラッシュとクォート文字をエスケープする。

記法 エスケープ対象
シングルクォート \と'
%q!...! \と!
%q(...) \と(と)

%qではバックスラッシュがシングルクォートに効かないので、以下の2つが同じ \\' になる。ここが混乱する。

irb(main):016:0> puts %q{\\\'} # エスケープされたバックスラッシュ(\\)と、単独のバックスラッシュ(\)と、シングルクォート(')
\\'
=> nil
irb(main):017:0> puts %q{\\\\'} # エスケープされたバックスラッシュ(\\)が2つと、シングルクォート(')
\\'
=> nil

%q''は、シングルクォートと同じ。

irb(main):018:0> puts %q'\\\''
\'
=> nil
irb(main):019:0> puts '\\\''
\'
=> nil