まつもと ゆきひろ@トヨタケーラムです.

In message "[ruby-list:257] Re: TUTORIAL(sono:1) - grep = first step"
    on 96/03/27, 石塚圭樹 <keiju / csg.mes.co.jp> writes:
|
|けいじゅ@事開事.三井造船です. 

|>参考までに今回のチュートリアルでどの辺が分からなかったか,も
|>うちょっと具体的に指摘して頂けません? もう,rubyを知らない自
|>分には戻れないので….^^;;
|
|はいはい. リクエストにお答えします. 

ありがとうございます.

|>2行目の「while gets」というのは,引数で指定されたファイルか
|>ら1行ずつ取り出すためのある種の決まり文句です.
|
|引数ではなくて, ARGVに入っている文字列をファイル名としているんでしょう
|ね?? ARGVは配列なので, 複数あるとどうなるのか疑問に思ったりします.

あ,引数というのは「コマンドライン引数」のことです.いわれて
みれば,getsの引数のように見えますね.

|>3行目でパターンに合う行があれば,printしています./#$pat/と
|>いう表現は,読み込んで来た行と$patで表される正規表現の比較を
|>行うという意味です.
|
|``#''の意味が分かりません.

これは「$patの値の文字列を正規表現に埋め込む」という意味です.
今回は#$patしか含みませんから,$pat(という文字列)で表現され
る正規表現を生成するという意味になります.

|>     1	$pat = Regexp.compile(ARGV.shift); 
|
|確かに説明がありませんね.

これは/#$pat/を使ったものに置き換えます.こんな感じですか.

     1	$pat = /${ARGV.shift}/
     2	while gets
     3	  print if $_ =~ $pat
     4	end

|>     1	st = "\033[7m"
|>     2	en = "\033[m"
|
|の必要性と, 

そうですね.これは説明が必要ですね.VT互換ターミナルでの反転
開始と終了のためのエスケープシーケンスです.

|>     7	    gsub! $pat, "#{st}&#{en}"
|
|が, 何が何だか分かりません(;_;
|
|きっと, #にからんでいると思いますが...

あたりです.マッチしたパターンの前後にエスケープシーケンスを
挿入しているわけです.gsub!っていうのは$_のなかで正規表現(第
1引数)にマッチする部分を全部第2引数の文字列で置き換えるもの
で,文字列中の"&"はマッチした部分文字列に置き換わります.awk
のgsubと同じです(って前提知識を求めないんでしたっけ).

                                まつもと ゆきひろ /:|)