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::"}
これでログインはできるようになりますが、ログイン後に別のエラーが発生します。
こちらの対処方法ついては、別エントリーで紹介します。
なお、操作によっては異なるエラーに遭遇するかもしれません。予めご了承ください。