稲葉です。

   for i in 
    
Dir.glob("*").grep(/^\d+$/).filter{|s|s.to_i}.sort.filter{|n|n.to_s}
     ...
は

   t1 = Dir.glob("*")
   t2 = t1.grep(/^\d+$/)
   t3 = t2.filter{|s|s.to_i}
   t4 = t3.sort
   t5 = t4.filter{|n|n.to_s}
   for i in t5
     ...

を短く(かつわかりづらく)書いたものです。

WATANABE Hirofumi wrote:
> 
> わたなべです.
> 
> Inaba Hiroto <inaba / sdd.tokyo-sc.toshiba.co.jp> writes:
> 
> :  for i in
> :   Dir.glob("*").grep(/^\d+$/).filter{|s|s.to_i}.sort.filter{|n|n.to_s}
> :     ...
> :   end
> :
> :とかでないといけないですね.  

この変数iを使わない修正は実は不要でした。(loopに入る前にしか評価するは
ずない...)

> :                           それから「Dir.glob("*").grep(/^\d+$/)」ま
> :でで得られるArrayの要素に"00"とか"010"とかがないという仮定も必要です.
> 
> その仮定をなくすには

もともとの柳川さんの使い道はMHのinboxのメール
ファイルの処理ということで上の仮定が成立すると思ったのでした。

>   for i in
>    Dir.glob("*").grep(/^\d+$/).filter{|s| [s.to_i, s]}.sort.filter{|n| n[1]}
>      ...
>    end
> という感じになりますね.

はい、一般にはこうなります。

> 結局 Schwartzian Transform なんだけど, Array の Array が簡単
> に sort できるから Perl よりすっきりしますね.

確かに。
--
			稲葉 浩人  <inaba / st.rim.or.jp>