如果我正確理解您的問題,我認爲您正在尋找TMPL_LOOP
標籤。
構建散列數組,並將其作爲變量傳遞給param()
調用。然後使用TMPL_LOOP
來構建您在foreach
中所做的事情。
my $sources_loop = [];
foreach $result (keys %$results_ref) {
$source = $results_ref->{$result}->{abs_path};
$source =~ s#/home/##;
push(@$sources_loop, { source => $source });
}
$template->param(sourcesloop => $sources_loop);
然後在模板:
<!--TMPL_LOOP NAME="sourcesloop"-->
<div><img src="<!--TMPL_VAR NAME="source"-->" /></div>
<!--/TMPL_LOOP-->
EDIT(響應於更新):
再次,如果我理解正確,那麼我會使用不同的密鑰來驅動的邏輯模板循環。你可以有TMPL_IF
爲TMPL_LOOP
my $sources_loop = [];
foreach $i ($hash{START}..$hash{END}){
if($pager == $i){
push(@$sources_loop, { lone => $i });
}
else {
push(@$sources_loop, { linked => $i });
}
}
$template->param(sourcesloop => $sourcesloop, hashleft => $hash{LEFT});
模板的一部分:
<!--TMPL_VAR NAME="hashleft"-->
<!--TMPL_LOOP NAME="sourcesloop"-->
<!--TMPL_IF NAME="lone"--><span><!--TMPL_VAR NAME="lone"-->"</span><!--/TMPL_IF-->
<!--TMPL_IF NAME="linked"--><span><a href="/index.pl?page=<!--TMPL_VAR NAME="linked"-->"><!--TMPL_VAR NAME="linked"--></a></span><!--/TMPL_IF-->
<!--/TMPL_LOOP-->
編輯:更新,包括$哈希{左}
所以,唯一的選擇是傳遞一個數組引用? –
HTML ::模板需要模板循環的匿名散列的arrayref。這就是它設計的方式。另外值得注意的是,匿名哈希也可以有許多鍵。 –
但在某些情況下,我只是想傳遞哈希引用而不是散列arrayref。 –