些細な一意のIDを実行するTTプラグインがあります。
sub get_unique_uid_tt {
my ( $classname, $o ) = @_;
my %h;
foreach my $item ( @{$o} ) {
unless ( exists $h{ $item->id } ) {
$h{ $item->id } = 1;
}
}
return keys %h;
}
ここで、テンプレート呼び出しは単純です。
[% Namespace.get_unique_uid_tt( data.users ) %]
「データ」はRDBオブジェクトであり、ユーザーはその関係の1つです。関係に1つまたは複数の要素があるかどうかに関係なく、「。users」がPerlでリストを直接返すことを確認しました。
ただし、TTは単一要素リストの要素を返し、複数要素のリストは適切に返すようです。
これを調べたところ、「。list」を使用してリストコンテキストを強制できることがわかりました。
[% Namespace.get_unique_uid_tt( data.users.list ) %]
Data :: Dumperが明らかにしたように、これは単一要素リストの意図どおりには機能しません。
$VAR1 = [
{
'value' => 1,
'key' => '__xrdbopriv_in_db'
},
{
'value' => bless(
... snip ...
),
'key' => 'db'
},
{
'value' => '1',
'key' => 'id'
}
];
期待される代わりに
$VAR1 = [
bless( {
'__xrdbopriv_in_db' => 1,
'id' => '1',
'db' => ... snip ...
}, 'DataClass' )
];
単一要素のリストであっても、オブジェクトのリストを取得するためのTTの他の簡単な方法はありますか?(1つのアプローチは関数を書き直すことですが、そうでないものは望ましくありません)