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()?)」というエラーになる場合の対処

Posted at October 24,2022 11:55 PM
Tag:[MovableType, TroubleShooting]

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 での変更点

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)