Confused about FOREACH and local variables
George <[email protected]> Thu, 3 Jul 2014 13:46:15 -0400
| Newsgroups | gmane.comp.lang.perl.modules.template-toolkit |
|---|---|
| Message-ID | <[email protected]> |
Hello. I am confused about how local/global variables work within a FOREACH loop. Consider this Perl program:
use Template;
my %data = (
'presidents' => [
{first_name => 'Bill', last_name => 'Clinton'},
{first_name => 'George'},
{first_name => 'Barack', last_name => 'Obama'},
],
);
my $tt = Template->new();
$tt->process('test.html', \%data);
and this "test.html" file:
[% FOREACH p IN presidents %]
Name: [% p.first_name %] [% p.last_name %]<BR>
[% END %]
[% FOREACH presidents %]
Name: [% first_name %] [% last_name %]<BR>
[% END %]
From what I gathered on the Template::Manual::Directives page, the second FOREACH loop is just the short form of the first version. And yet the output in the second case is unexpected:
Name: Bill Clinton<BR>
Name: George <BR>
Name: Barack Obama<BR>
Name: Bill Clinton<BR>
Name: George Clinton<BR>
Name: Barack Obama<BR>
In the first case, "George" has no last name, so no value is printed. In the second case, it appears "George" inherits the "last_name" value from the previous iteration.
Is this the intended operation?