2010年4月10日土曜日

[Perl] HTML::Template::Pro で found strange parameter

HTML::Template::Pro で TMPL_LOOP を扱っている時にちょっと注意すること。

通常、TMPL_LOOP にアサインするのは HASHREF の ARRAYREF ですが、そうではないときに以下のような warning が出ます。

HTML::Template::Pro:_lowercase_keys:in param_tree: found strange parameter $param while hash was expected

どこかからか受け取った HASHREF の ARRAYREF をそのまま TMPL_LOOP に渡しているようなコードで、
受け取り先の出力仕様が突然変わったときなどに原因追求が困難になります。

例えば、Module を他の開発者が担当しており、@LOOP_VARS が HTML::Template::Pro に渡されていることを知らないとします。

use strict;
use warnings;
use HTML::Template::Pro;

package Module;
our @LOOP_VARS = (
    {key1 => 'value1'}, # 通常の渡し方。問題なし。
    {key2 => [1,2,3]},  # HASHREF の value が ARRAYREF になった。問題あり。
    'key3',             # HASHREF が SCALAR になった。問題あり。
);

package main;
my $tmpl = HTML::Template::Pro->new(filename => 'test.tmpl');
$tmpl->param(loop => \@Module::LOOP_VARS);

実行結果はこんな感じです。

HTML::Template::Pro:_lowercase_keys:in param_tree: found strange parameter 1 while hash was expected at hoge.pl line 14
HTML::Template::Pro:_lowercase_keys:in param_tree: found strange parameter 2 while hash was expected at hoge.pl line 14
HTML::Template::Pro:_lowercase_keys:in param_tree: found strange parameter 3 while hash was expected at hoge.pl line 14
HTML::Template::Pro:_lowercase_keys:in param_tree: found strange parameter key3 while hash was expected at hoge.pl line 14

ご注意ください。

0 件のコメント: