Ruby
Ruby技術者認定試験
新人プログラマ応援

Ruby技術者認定試験 Silver (2.1): 練習問題(コマンドラインオプション編)

はじめに

筆者
  趣味レベルでRubyを使っていたアマチュアプログラマ
この記事の趣旨
  筆者がRuby技術者認定試験Silver2.1の勉強をする過程で
  理解が不十分だった内容をクイズ形式で紹介します。
    解答+簡易解説は”▶解答”をクリックで開きます。
参考文献
  Rubyリファレンスマニュアル(2.1.0)

問題

・次のうち、存在しないコマンドラインオプションはどれ?(一つ選択)
 a. -a
 b. -b
 c. -c
 d. -d
 e. -e

解答
 -b:存在しないオプション。
  -a:オートスプリットモードをONにする(-n, -p と同時に指定)
  -c:実行せずに文法をチェック。問題なければ"Syntax OK"と出力。
  -d:デバッグモードでスクリプトを実行($DEBUGをtrueにする)
     --debug でも同じ
  -e:コマンドラインからスクリプトを指定
     -e 指定時は引数からスクリプトファイル名を取らない



・次のうち、後ろにディレクトリ名をとれないのはどれ?(一つ選択)
 a. -C
 b. -I  (大文字の i )
 c. -S
 d. -x

解答
-S:環境変数PATHの値を使ってスクリプトを探すように指定。
  -C directory :スクリプト実行前に指定したディレクトリに移動
  -I directory :ファイルをロードするパスを指定(追加)
  -x [directory]:メッセージ中のスクリプトを取り出して実行。
         ディレクトリ名を指定すると
         スクリプト実行前に指定したディレクトリに移動



・次のうち、存在しないコマンドラインオプションはどれ?(一つ選択)
 a. --copyright
 b. --disable
 c. --encoding
 d. --help
 e. --verbose
 f. --version

解答
--disable:--enable, --disable は 2.2 から
  --copyright:著作権を表示
  --encoding :デフォルトの外部エンコーディングと内部エンコーディングを
         ex[:in] で指定(-E ex[:in]でも可)
  --help  :コマンドラインオプションの概要を表示(-h でも可)
  --verbose :冗長モード。組み込み変数 $VERBOSE をtrueにセット
  --version :Rubyのバージョンを表示
    -v について
      -v のみが指定されたときはバージョンを表示して実行を終了。
      -v 以外にも引数がある場合はバージョンを表示し、冗長モードになる。
    -w はバージョンを表示せずに冗長モードになる。



・次のうち、グローバル変数に関係しないものはどれ?(一つ選択)
 a. -0数字
 b. -Fregexp
 c. -l
 d. -n
 e. -p

解答
  -n   :プログラム全体が while gets; ...;end で囲まれているように動作する。
        グローバル変数には関係しない
  -0数字 :入力レコードセパレータ(\$/)を8進数で指定
  -Fregexp:入力フィールドセパレータ(\$;)に regexp をセット
  -l   :行末の自動処理を行う。
        \$\ を \$/ と同じ値に設定、printでの出力時に改行を付加する。
        -n フラグまたは-pフラグが指定されていると
        gets で読み込まれた各行の最後に対して String#chop!を行う。
  -p   :-nフラグとほぼ同じだが、各ループの最後に変数 $_ の値を出力する。



・次のうち、オプション単体でしか動作しないものはどれ?(一つ選択)
 a. -i
 b. -r
 c. -s
 d. -T
 e. -W
 f. -y

解答
-y:コンパイラデバッグモード( --yydebug でも可)
  -i[extension]:引数で指定されたファイルの内容を置き換える(in-place edit)
          extensionを指定すると元のファイルを拡張子をつけた形で保存
  -r feature :feature で指定されるライブラリを Kernel.#requireする。
  -s     :スクリプト名の後ろにおいた `-'で始まる引数を解釈し、
          同名のグローバル変数に値を設定
  -T[level]  :不純度チェックを行う。levelは安全度レベルの指定
  -W[level]  :冗長モードを三段階のレベルで指定

あとがき

しんどかった(›´ω`‹ ) ゲッソリ
コマンドラインオプションはほとんど使ってこなかったため、
「どれも理解が不十分だから、いっそのこと問題で全部登場させてみるか」
と思ったのが運の尽きでした。
しかも苦労した割に完成度は低いという…問題を作るのって難しいんだなぁ。