一定範囲の行を取り出す

perlには開始パターンと終了パターンを指定すると,その範囲を取り出せる演算子が存在するらしい.

def range( a, s, e)

  def find(a, p)
    return a.index(p) unless p.kind_of? Regexp
    a.each_with_index {|x,c| return c if x =~ p } 
    return nil
  end

  sl = find(a,s)
  if sl
    el = find( a[sl+1..-1], e)
    return a[sl+1, el] if el
  end
  nil
end

# 配列に各行が入っているものとする
a = %w[aaa begin bbb ccc ddd end eee]
p range( a, 'begin', 'end')
p range( a, /\Abegin\b/, /\Aend\b/)
#=> ["bbb", "ccc", "ddd"]
#=> ["bbb", "ccc", "ddd"]

行番号(index)をペアにして返すだけにして,範囲を取り出すのは,メソッド呼び出し後にやったほうがいいかも?

また間抜けなことをしている予感.

メソッド内でメソッド定義しても,スコープ的にはダダモレなのか…