Perl5.24からAUTOLOAD(DESTROY)の仕様が変わったらしい

そもそもAUTOLOADは、メソッドが無かった時に代わりに呼ばれるやつで、パフォーマンスがどうのってあまり使われる事ないかもしれないですが、便利といえば便利なのでたまーに使うんですが、Perlのバージョンを上げたら

Can't call method "DESTROY" on an undefined value at ...

ってな感じで、エラーが続出してアプリが起動しなくなってなんだこれって思って調べてみたら・・

If you define an AUTOLOAD in your class, then Perl will call your AUTOLOAD to handle the DESTROY method. You can prevent this by defining an empty DESTROY, like we did in the autoloading example. You can also check the value of $AUTOLOAD and return without doing anything when called to handle DESTROY.

http://search.cpan.org/~rjbs/perl-5.24.0/pod/perlobj.pod#AUTOLOAD

DESTROYメソッドを明示的に書かない場合は、AUTOLOADが呼ばれるようになったぽい。
って事で、回避する為に空のDESTORYメソッドを用意。

sub AUTOLOAD {
    my $self = shift;
}

sub DESTROY {}

無事に起動できましたとさ。
めでたしめでたし。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください