まつもと ゆきひろです

In message "[ruby-list:8845] mapping a tagged file onto a class"
    on 98/07/24, Takao KAWAMURA <kawamura / ike.tottori-u.ac.jp> writes:

|各行にフィルード名と値が含まれ、レコードの区切りは空行という、
|よくあるタイプのテキストデータベースがありますよね。ええと、
|
|DATABASE : (RECORD "\n")*
|RECORD   : (FIELD "\n")*
|FIELD    : KEY "\t" VALUE
|
|でいいのかな? (KEY,VALUEは文字列)

えーと,shift reduce conflictになるんですけど.^^;;;
あ,「レコードの区切りは空行」だから

|DATABASE : (RECORD "\n\n")*

なのかな.

|こういうテキストデータベースを読んで、各レコードをインスタン
|スにし、各KEYをインスタンス変数にしたいのです。

どーしてもインスタンス変数にしたいですか? なんとなく,ハッ
シュに格納した方が自然な気がするんですが.それなら

    def initialize(record)
        @fields = {}
        key = value = nil
        record.each_line do |l|
            l.chomp!
            key,value = l.split("\t")
            @fields[key] = value
        end
    end

なんて感じになると思うのですが.テストはしてませんのでイメー
ジとして捉えて欲しいのですが,これなら妙なevalは不要ですよね.

インスタンス変数にしちゃうとattrかevalを使わないとアクセスで
きませんから使い勝手が悪いと思います.

|それと、Perl版より倍遅いので輪郭をとってみようと思っているの
|ですが、そういうツールはありましたっけ?

輪郭って profile のことですよね.profilerはまだ作ってません.
デバッガと同じ仕組みをつかえばできるはずなんですけどね.

なお,仕事の内容によるのですが,残念ながら現状ではPerlをその
まま移植したコードが数割増しから2倍ってのは比較的典型的な速
度比です.
                                まつもと ゆきひろ /:|)