Skip to:
MT::App::forward の実装的には my $app = shift; my ( $new_mode, @params ) = @_; なので、ハッシュをリファレンスで渡す必要はないのだが、MT本体のリポジトリで $app->forward の用例を調べてみると、 new_mode が filtered_list の場合はただのハッシュを渡し、それ以外ではハッシュリファレンスを渡すようになっている。例外として、 MT::CMS::Tag::rename_tag は xhr 有効時に filtered_list にハッシュリファレンスを渡すようになっており、テストで意図的にそのルートを通そうとすると Reference found where even-sized list expected という警告が出てテストが失敗する。どちらでも通るようにするには MT::CMS::Common に以下のようなパッチを当てておくのが無難だが、 MT::CMS::Tag::rename_tag 側を直す手もある。どうするか。
my $app = shift; my ( $new_mode, @params ) = @_;
$app->forward
--- a/lib/MT/CMS/Common.pm +++ b/lib/MT/CMS/Common.pm @@ -1479,7 +1479,7 @@ LOOP: sub filtered_list { my $app = shift; - my (%forward_params) = @_; + my (%forward_params) = ref $_[0] eq 'HASH' ? %$_[0] : @_; my $blog_id = $app->param('blog_id') || 0; my $filter_id = $app->param('fid') || $forward_params{saved_fid}; my $blog = $blog_id ? $app->blog : undef;
@Chieko Matsuo ありがとうございます。クローズします。
@Kenichi Ishigaki develop ブランチかつ Perl 5.16 環境で、警告が出ないことを確認しました。
@Keita Sugama ありがとうございます。
@Chieko Matsuo すみません。古い Perl で問題が出ていたので追加の修正を入れました。CI の都合で先にマージしてしまったので、 develop ブランチかつ Perl 5.16 環境で前回と同じように警告が出ないことをご確認おねがいします。
@Kenichi Ishigaki
ありがとうございます。古いPerlの事情は分かりませんが、修正後はより安全そうなので良さそうです。
@Keita Sugama https://github.com/movabletype/movabletype/pull/3441 で古い Perl でコンパイルエラーになる件を修正しました。念のためレビューおねがいします。
MT::App::forward の実装的には
my $app = shift; my ( $new_mode, @params ) = @_;
なので、ハッシュをリファレンスで渡す必要はないのだが、MT本体のリポジトリで$app->forward
の用例を調べてみると、 new_mode が filtered_list の場合はただのハッシュを渡し、それ以外ではハッシュリファレンスを渡すようになっている。例外として、 MT::CMS::Tag::rename_tag は xhr 有効時に filtered_list にハッシュリファレンスを渡すようになっており、テストで意図的にそのルートを通そうとすると Reference found where even-sized list expected という警告が出てテストが失敗する。どちらでも通るようにするには MT::CMS::Common に以下のようなパッチを当てておくのが無難だが、 MT::CMS::Tag::rename_tag 側を直す手もある。どうするか。--- a/lib/MT/CMS/Common.pm +++ b/lib/MT/CMS/Common.pm @@ -1479,7 +1479,7 @@ LOOP: sub filtered_list { my $app = shift; - my (%forward_params) = @_; + my (%forward_params) = ref $_[0] eq 'HASH' ? %$_[0] : @_; my $blog_id = $app->param('blog_id') || 0; my $filter_id = $app->param('fid') || $forward_params{saved_fid}; my $blog = $blog_id ? $app->blog : undef;