藤崎(とうさき)と申します。

>始めまして フジサキと申します
はじめまして藤崎です。(同じ漢字だったりして)

自分が書いているプログラムの動作を把握することが理解につながると
思いますので、このプログラムがどのように動作しているかを追って
いきましょう。

> list  = []
>  Filename = "eki.d" 
>  fd = open(Filename)
>  while (st_list = fd.gets)
>    list  << st_list    ##  sotoni   
>  end
> fd.close

この段階で

list[0] == "1\n"
list[1] == "京王線 新宿 八王子\n"
list[2] == "2\n"
list[3] == "小田急線 新宿 狛江\n"
list[4] == "3\n"
list[5] == "池袋線 池袋 清瀬\n"
list[6] == "新宿線 西武新宿 東村山\n"

というようなかたちになっています(\rが入っているかもしれませんが)。

>  #  巧くいく   
>#     print   list    # test

ここで、listはArrayオブジェクトです。
printは、Stringオブジェクト以外を引数としたときには、to_sメソッドを
呼び出してStringオブジェクトを得て、それを出力します。
結果として、ここの print では、list[0]〜list[6]が結合されて出力されます。

> # 線 駅を分けるが ダメ 
> # 最後の1行だけ 何故か判らない   
>  for  list in split(' ')  
>     puts   list  
>  end  

これは、

for list in $_.split(' ')
  puts list
end

と同じです。

$_ は、gets や readline によって読み込まれた最後の行が格納されています。
つまり、"新宿線 西武新宿 東村山\n"です。
これを split(' ') してるので、
["新宿線", "西武新宿", "東村山\n"] となり、
各要素を list に入れて puts list を繰り返すことになります。
出力は、

----------
新宿線
西武新宿
東村山

----------

となります。

どうでしょうか。
理解の助けになればと思います。

-----------------------------------------------------------------------
藤崎博志 (tousaki / mail3.netwave.or.jp)