トップページへ

Movable Type 5で「Got an error: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)」というエラーになる場合の対処

小粋空間 » Movable Type » トラブルシューティング » Movable Type 5で「Got an error: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)」というエラーになる場合の対処

Movable Type 5で「Got an error: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)」というエラーになる場合の対処について紹介します。

1.問題点

過去のバージョンですが、Movable Type 5で管理画面にアクセスすると「Got an error: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)」というエラーに遭遇しました。

ログイン画面でこのエラーが発生するため、ログインすることもできません。

2.原因

サーバのPerlがバージョンアップされたため、MT5のPerlバージョンと適合しなくなったようです。

3.対処

調べたところ、「Got an error: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)」のエラーに遭遇するk所は下記の3ファイルでした。

extlib/Data/ObjectDriver/Driver/DBD.pm
extlib/I18N/LangTags/Detect.pm
extlib/SOAP/Lite.pm

それぞれ下記の修正を行います。

extlib/Data/ObjectDriver/Driver/DBD.pm
14行目

変更前

    unless (defined %{"${subclass}::"}) {

変更後

    unless (%{"${subclass}::"}) {

extlib/I18N/LangTags/Detect.pm
140行目

変更前

     if defined(%{$module . "::Lexicon"}) or defined(@{$module . "::ISA"});

変更後

     if (%{$module . "::Lexicon"}) or defined(@{$module . "::ISA"});

extlib/SOAP/Lite.pm
465行目

変更前

    unless (defined %{"$protocol_class\::Client::"}

変更後

    unless (%{"$protocol_class\::Client::"}

これでログインはできるようになりますが、ログイン後に別のエラーが発生します。

こちらの対処方法ついては、別エントリーで紹介します。

なお、操作によっては異なるエラーに遭遇するかもしれません。予めご了承ください。

4.参考サイト

perl v5.22.0 での変更点

« 前の記事へ

次の記事へ »

トップページへ