namazu-dev(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: supported document



knok@xxxxxxxxxxxxx (NOKUBI Takatsugu) wrote:

>  修正してみました。完全なチェックはできていないのですが、
>
>> # 翌朝、目覚めたら解決している、だったら嬉しいなと :-)
>
>  そうであることを望みます :-)

だめでした。

  % ./mknmz 
  Undefined subroutine &bzip2::tmpnam \
  called at /home/satoru/cvs/namazu/src/../filter/bzip2.pl line 30.

これは、util.pl から package util; を取り去ったことが原因の
ようです。

まず、 mknmz 内で require "util.pl" 文が実行されると、
util.pl の内容が読み込まれ、 mknmz の package (namazu) の中
に取り込まれます。

次に、 mknmz から require "bzip2.pl" が呼ばれ、bzip2.pl の中
では require "util.pl" 文を実行しているわけですが、このとき、 
util.pl はすでに一度、mknmz に読み込まれているので、 perl は 
2重の読み込みを防ぎます。

よって、bzip2.pl からは tmpnam() が使えず、くだんのエラーに
なるわけです。ちとややこしいですね。 util:: を復活させること
で対応します。

# 思いきって util.pm にした方がいいかな? だとすると他の *.pl
# 類も .pm にしたくなるけど。(わりと面倒)

ところで、

    # check filter modules
    foreach my $module (<$filterdir2/*.pl>) {

ここは

    # check filter modules
    my @filters = glob "$filterdir2/*.pl";
    @filters = glob "$FILTERDIR/*.pl" if @filters == 0;
    for my $module (@filters) {

とい書いた方がいいです。

  1. フィルタの置場所は 2つある (1つは相対パス[*1])
  2. <*.pl> より glob "*.pl" が好ましい
  3. foreach より for が好ましい (統一しましょう)

註1:

  src ディレクトリから簡単に (make installすることなしに) 実
  行できるように相対パスを @INC に入れています。これは原因の
  わかりづらい災害の元になりそうなので --test オプションを導
  入して、これを指定したときだけ相対パスを @INC に入れるとい
  う仕様にした方がよさそうです。というわけで、そうします。

-- Satoru Takabayashi