コンテンツにスキップ

パーセント記法

文字列リテラル、コマンド出力、正規表現リテラル、配列式、シンボルでは、% で始まる形式の記法を用いることができる。

% の後ろの区切り文字には、任意の非英数字を使うことができる。(例:!, |, ?, [], (), {})

%, %Q : ダブルクォート文字列

  • シングルクオートやダブルクオートのエスケープが不要になる。
  • 後述の%q()と違い、変数・定数の展開もできる。
str = %[Programming language "Ruby"]
puts str    # => Programming language "Ruby"

ruby = "Ruby"
str2 = %[Programming language "#{ruby}"]
puts str2   # => Programming language "Ruby"

%q : シングルクォート文字列

  • 変数や定数は展開されない。
ruby = "Ruby"
str = %q[Programming language "#{ruby}"]
puts str    # => Programming language "#{ruby}"

%W, %w : 文字列配列

  • 要素が文字列の配列を作成する。
  • %W は式展開されるが、%w は式展開されない。
ruby = 'Ruby'
PYTHON = 'Python'

array = %W[#{ruby} #{PYTHON} PHP]
p array   # => ["Ruby", "Python", "PHP"]

array = %w[#{ruby} #{PYTHON} PHP]
p array   # => ["\#{ruby}", "\#{PYTHON}", "PHP"]

%I, %i : シンボル配列

  • 要素がシンボルの配列を作成する。
  • %I は式展開されるが、%i は式展開されない。
ruby = 'Ruby'
PYTHON = 'Python'

array = %I[#{ruby} #{PYTHON} PHP]
p array   # => [:Ruby, :Python, :PHP]

array = %i[#{ruby} #{PYTHON} PHP]
p array   # => [:"\#{ruby}", :"\#{PYTHON}", :PHP]

%x : コマンド出力

  • コマンド出力する。バッククウォートで囲った場合と同等。
res = %x[date]  # date コマンドの実行
p res     # => "Thu Jan 23 15:07:10 JST 2025\n"

%s : シンボル

  • 式展開はされない。
sym = %s[Ruby]
p sym     # => :Ruby

sym = %s[Ruby Python]
p sym     # => :"Ruby Python"

%r : 正規表現

  • Regexp インスタンスを生成する。
reg = %r[Ruby]
p reg     # => /Ruby/