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; "とやってみたら、期待通り文法エラーだし…。
これ以上の究明は時間がかかるしやめておきますけど。