組み込み変数
- 以下,訳の分からない記号が並んでいますが,最初に述べましたように,プログラムにおいて最も重要なのは,「読みやすいこと,理解しやすいこと」です.以下に示すように,意味のない記号に対して特別な意味を与える方法は絶対に避けるべきです.Ruby のマニュアルには,「覚え方」などというものが書いてありますが,このような記号の意味を知らなければプログラムを「書けない,読めない」ような言語は使用すべきではありません.できる限り,以下の変数の使用は避けてください.
-
- $_ 最後に gets,または,readline で読み込んだ文字列
- $& 最後にマッチした文字列
- $~ 最後に成功したマッチに関する MatchData クラスのオブジェクト
- $` 最後にマッチした部分より前の文字列
- $' 最後にマッチした部分より後ろの文字列
- $+ 最後の括弧に対応する部分文字列
- $1,$2,・・・ n 番目の括弧にマッチした文字列
- $? 最後に終了した子プロセスのステータス
- $! 例外の種類
- $@ 例外が発生した場所
- $/ 入力レコードセパレータ
- $\ 出力レコードセパレータ
- $, デフォルトの区切り文字列
- $; split で引数を省略した場合の区切り文字
- $. 最後に読んだ入力ファイルの行番号
- $< 引数で構成される仮想ファイル
- $> 標準出力
- $0 現在実行中の Ruby スクリプトの名前
- $PROGRAM_NAME 現在実行中の Ruby スクリプトの名前
- $* Ruby スクリプトに与えられた引数を表す配列
- $$ 現在実行中の Ruby プロセスの pid
- $: ファイルをロードする時に検索するディレクトリのリスト
- $LOAD_PATH ファイルをロードする時に検索するディレクトリのリスト
- $FILENAME ARGF を通して現在読み込み中のファイル名
- $stdin 標準入力
- $stdout 標準出力
- $stderr 標準エラー出力
- $KCODE マルチバイト文字列エンコーディング
- $_
- 最後に gets または readline で読み込んだ文字列です.EOF に達した場合には,nil を返します.
- $&
- 現在のスコープにおいて,正規表現が最後にマッチした文字列です.最後のマッチが失敗していた場合には nil を返します.
- /a./ =~ "xxabcyyac"; p $& # => "ab"
- $~
- 現在のスコープにおいて,正規表現が最後に成功したマッチに関する MatchData クラスのオブジェクトです.このデータから n 番目のマッチ( $n )を取り出すためには,$~[n] で参照できます.Regexp クラスのメソッド last_match と同じです.
- /a./ =~ "xxabcyyac"; p $~[0] # => "ab"
- $`
- 現在のスコープにおいて,正規表現が最後にマッチした部分より前の文字列です.最後のマッチが失敗していた場合には nilを返します.MatchData クラスのメソッド pre_match と同じです.
- /a./ =~ "xxabcyyac"; p $` # => "xx"
- $'
- 現在のスコープにおいて,正規表現が最後にマッチした部分より後ろの文字列です.最後のマッチが失敗していた場合には nil を返します.MatchData クラスのメソッド post_match と同じです.
- /a./ =~ "xxabcyyac"; p $' # => "cyyac"
- $+
- 現在のスコープにおいて,正規表現が最後にマッチした中で,最後の括弧に対応する部分文字列です.最後のマッチが失敗していた場合には nil を返します.
- /(ab)(cy)/ =~ "xxabcyyac"; p $+ # => "cy"
- $1,$2,・・・
- 現在のスコープにおいて,正規表現が最後にマッチした中で,n 番目の括弧にマッチした文字列が格納されます.該当する括弧がなければ nil が入っています.Regexp クラスのメソッド last_match[1],last_match[2],・・・ 等と同じです.
- /(ab)(cy)/ =~ "xxabcyyac"; p $1 # => "ab"
- $?
- このスレッドで最後に終了した子プロセスのステータス( Process::Status クラスのオブジェクト)です.
- $!
- 例外に関する情報を表すオブジェクトであり,raise によって設定されます(例外処理参照).
- $@
- 例外が発生した場所を表す配列です(例外処理参照).
- $/
- 入力レコードセパレータを表す文字列です.デフォルト値は \n です.この変数に nil を設定すると,ファイル全体を一度に読み込みます.空文字列 "" を設定すると,パラグラフモードとみなされ,2 つ以上連続した改行がレコードの区切りになります.
- $\
- 出力レコードセパレータを表す文字列です.組み込み関数 print が引数の最後にこの文字列を出力します.デフォルトは nil で,何も出力しません.
- $,
- デフォルトの区切り文字列です.Array クラスのメソッド join で引数を省略した場合と,組み込み関数 print の各引数の間で出力されます.デフォルト値は nil で,空文字列と同じ結果になります.
- $;
- String クラスのメソッド split,または,組み込み関数 split において,引数を省略した場合の区切り文字です.デフォルト値は nil です.詳細は String クラスのメソッド split を参照してください.
- $; = "xx"; p "aaxxbbxxyy".split() # => ["aa", "bb", "yy"]
- $.
- 最後に読んだ入力ファイルの行番号を表す整数です.組み込み定数 ARGF(組み込み変数 $< の別名)のメソッド lineno と同じです.各引数ファイル毎の行番号が必要な場合は,ARGF の file.lineno を使用します.
- $<
- 引数(なければ,標準入力)で構成される仮想ファイルであり,組み込み定数 ARGF の別名です.
- $>
- 標準出力( $stdout の別名)
- $> = open("file3", "w"); p "abc" # => "abc" # file3 に出力
- $0
- $PROGRAM_NAME
- 現在実行中の Ruby スクリプトの名前を表す文字列です.
- printf "Now Script: %s", $0 # => Now Script: test.rb
- $*
- Ruby スクリプトに与えられた引数を表す配列であり,組み込み定数 ARGV の別名です(組み込み定数 ARGF 参照).
- $$
- 現在実行中の Ruby プロセスの pid です.
- printf "Now Script: %s", $$ # => Now Script: 3788
- $:
- $LOAD_PATH
- 組み込み関数 load や require が,ファイルをロードする時に検索するディレクトリのリストを含む配列です.
- $FILENAME
- 仮想ファイル ARGF を通して現在読み込み中のファイル名です.組み込み定数 ARGF のメソッド filename と同じです(組み込み関数 gets 参照)
- $stdin
- 標準入力
- $stdin = open("file3", "r"); a = gets; p a # => "\"abc\"\n" # file3 から入力
- $stdout
- 標準出力
- $stdout = open("file3", "w"); p "abc" # => "abc" # file3 に出力
- $stderr
- 標準エラー出力
- $KCODE
- Ruby の認識するマルチバイト文字列エンコーディングです.変数の値は,"EUC","SJIS","UTF8",または,"NONE" のいずれかの文字列です.代入するときには,値の最初の 1 バイトしか意味がなく,また,大文字小文字の違いも無視されます.