Rubyプログラムを実行するときに、プログラム自身に与えた引数を Rubyプログラムから利用できる。たとえば、
% ./test.rb a b c d
のように起動した場合、与えた引数 `a', `b', `c', `d'
は、自動的に配列変数 ARGV
に代入される。
具体的には、
ARGV | |||
---|---|---|---|
ARGV[0] |
ARGV[1] |
ARGV[2] |
ARGV[3] |
"a" |
"b" |
"c" |
"d" |
ARGV[0] = "a" ARGV[1] = "b" ARGV[2] = "c" ARGV[3] = "d"
というふうに値が格納される。これを利用すると、プログラム起動時に 与えた情報で動作を決定するものが作れる。
たとえば、1から指定した数までの総和を求めるときに、
% ./sum.rb 100
で100までの総和を求めるようなプログラム
(sum.rb
)は以下のように書ける。
#!/usr/koeki/bin/ruby # coding: utf-8 if ARGV[0] == nil STDERR.puts "起動時に指定した値までの自然数を全部足します." STDERR.puts "例: ./sum.rb 100 --- 1から100までの総和を求める." exit(1) end sum = 0 goal = ARGV[0].to_i # 文字列なので整数に直す goal.downto(1) do |x| sum += x end printf("1から%dまでの自然数の総和は%dです\n", goal, sum)
STDERR
プログラム先頭で ARGV[0]
が nil
か
どうか比較しているが、これは対応する引数が与えられなかった場合の
判定である。コマンドラインで引数を指定しなかった場合(あるいは
個数が足りない場合)の処理も考慮する必要がある。
このように、プログラムを起動するときに利用者が起動方法を間違えた
場合には適切なメッセージを端末に出力する必要がある。そのような場合は
たんに printf
するのではなく、
STDERR
に対してprintf
する
必要がある。たんに printf
すると、
% ./sum.rb > hogehoge
のように起動した場合、エラーメッセージさえもファイル
(上記の場合hogehoge
)に書かれるため、
利用者の目に触れずに終わってしまう。
Rubyプログラムの実行が終わるときに、プログラム全体が「うまくいった」 か「うまくいかなかったか」をシステムに対して教えることができる。この情報 のことを終了ステータスという。
終了ステータスは整数で表し、
とする決まりになっている。sum.rb
でエラーメッセージを表示したあと、
exit(1)
としているのは、システムに対し「予定した仕事ができずに終わっちゃった」 ことを示すためである。
exit
は、直ちにプログラムの実行を終了し
システムに終了コードを返す。プログラム実行中にエラーが発生した
場合などはプログラムを継続する意味がなくなるため、exit
を利
用して終了する。