高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

なんか怪しい

 Perlコードを書いているんですが、どうも書き込み違反でActivePerlが落ちます。絞り込んでみると、どうも以下のコードが原因っぽい。

    use Webpage::Parts;
    foreach my $class(@{$self->{parts}})
    {
      use $class;
      $self->addvars($class::getvars());
    }

 どうもコンパイル時のエラーみたいです。直前のif文でここに来るはずがないのに落ちますし。
 下のように直してみると、何事もなくコードが通ります。

    use Webpage::Parts;
    foreach my $pack(@{$self->{parts}})
    {
      (my $file = $pack) =~ s/::/\//;
      require "$file.pm" if(-e $file);
      $self->addvars($pack->getvars());
    }

 まあ、useに変数使っちゃいけないんだろうなぁ、というのは何となく分かるのですが。コンパイル時に変数の中身が決まっているわけはないし…。
でもそれならそれで、dieして止まるのが正しい挙動なはず。どうもバグ臭いですね。コマンドラインでPerl -e "use $class; "とやってみたら、期待通り文法エラーだし…。
これ以上の究明は時間がかかるしやめておきますけど。