Perl Subversion pre-commit hookがあります。以前のバージョンの Perl では見られなかった、Perl 5.14 を使用している誰かに謎のエラー メッセージが表示されました。
(in cleanup) Non existant subroutine called Section::File::DESTROY at /home/tftung/svn_repos/hooks/pre-commit-kitchen-sink-hook.pl line 282
最初に私を襲ったのは、 nonexisting のスペルミスでした。少年、その男はまったく綴ることができません! それはほとんど...私のスペルと同じくらい悪いです...ちょっと待ってください...
私のコードの1251行目は、私のAUTOLOAD
サブルーチンからのものです:
croak qq(Non existant subroutine called $AUTOLOAD);
うん、それはエラー行です。
これは、私が Mac で使用している Perl 5.12 では発生せず、Strawberry と ActiveState の両方のフレーバーで PC にインストールされています。また、Perl 5.8 から 5.10 までの社内 Linux ボックスでは発生しません。
Perl が を呼び出しているようDESTROY
で、それが私のAUTOLOAD
サブルーチンによって検出されています。私のパッケージには存在DESTROY
しないAUTOLOAD
サブルーチンであるため、サブルーチンはこのエラー メッセージを表示します。
- これはバグですか、それとも新しいバージョンの Perl の機能ですか? DESTROY への呼び出しをピックアップする AUTOLOAD はかなり新しい機能のようです。
- これを修正するにはどうすればよいですか? おそらく正しい答えである私の AUTOLOAD サブルーチンを取り除くことに加えて、私は意味します。このスクリプトをゼロから完全に書き直す予定なので、あまり手を加えたくありません。
DESTROY
何もしないサブルーチンを書くことができます。AUTOLOAD
ルーチンに への呼び出しを無視させることができますDESTROY
。
これを処理する最良の方法は何ですか?