in reply to Text::Template
You have two options available when you run into this problem:
Also, I found that Text::Template doesn't behave exactly as you might expect in dereferencing variables. For instance, take the following code as an example:
Assuming your template delimiters are the default ({ and }), you might expect to use {$measurements->{'temperature'}->{'current'}} to print the current temperature in your template. I had to use {$measurements{'temperature'}{'current'}} instead, and I'm not entirely sure why. (If any monks have an idea, please let me know.) This was with version 1.41 (current as of 2001-10-22); I have emailed the author with the question and am awaiting a response.my %vars = ('measurements' => {'temperature' => {'current' => '22 degC +', 'high' => '26 degC', 'low' => '18 degC' }, 'humidity' => '82%' }, 'time' => scalar(localtime) ); my $tt = Text::Template->new(SOURCE => $templateFile) or die "Couldn't + construct template: $Text::Template::ERROR"; my $weather = $tt->fill_in(HASH => \%vars);
With all that said, Text::Template is a great module for removing more of the display element from your code. For my scripts, I probably would have gone with either HTML::Template or Template Toolkit if they had been readily available.
Update: I overlooked one important section of the documentation. As Dominus politely pointed out in an email, the HASH section explains how the templates are filled. Indeed,
If the value is a reference to an array, then @key is set to that array. If the value is a reference to a hash, then %key is set to that hash. Similarly if value is any other kind of reference.I always manage to miss the important parts of documentation. :-)
--PotPieMan
|
|---|