Home arrow Perl Programming arrow Looping, Security, and Templating Tools

Looping, Security, and Templating Tools

In this second part of a five-part series on templating tools, you'll learn about loops, arrays, hashes, and more. It is excerpted from chapter three of the book Advanced Perl Programming, Second Edition, written by Simon Cozens (O'Reilly; ISBN: 0596004567). Copyright 2007 O'Reilly Media, Inc. All rights reserved. Used with permission from the publisher. Available from booksellers or direct from O'Reilly Media.

  1. Looping, Security, and Templating Tools
  2. Security and Error Checking
  3. Text::Template Tricks
  4. HTML::Template
By: O'Reilly Media
Rating: starstarstarstarstar / 3
August 14, 2008

print this article



Loops, Arrays, and Hashes

So much for simple templates. Because Text::Template evaluates the code in braces as honest-to-goodness Perl code, we can do a whole lot more with templates. Let's suppose we're invoicing for some design work:

  $client = "Acme Motorhomes and Eugenics Ltd.";
  %jobs = 
("Designing the new logo" => 450.00,
"Letterheads" => 300.00,
"Web site redesign"       => 900.00,
"Miscellaneous Expenses" => 33.75

We can create a template to do the work for us--the invoicing work, that is, not the design work:

  {my $total=0; ''}
  To {$client}:

  Thank you for consulting the services of Fungly Foobar Design
  Associates. Here is our invoice in accordance with the work we have
  carried out for you:

while (my ($work, $price) = each %jobs) {
$OUT .= $work . (" " x (50 - length $work)). sprintf("%6.2f", $price)."\n";
$total += $price;

  Total             {sprintf "%6.2f",$total}

  Payment terms 30 days.

  Many thanks,
  Fungly Foobar

What's going on here? First, we set up a private variable, $total, in the template and set it to zero. However, since we don't want a 0 appearing at the top of our template, we make sure our code snippet returns '' so it adds nothing to the output. This is a handy trick.

Next we want to loop over the jobs hash. Adding each price to the total is simple enough, but we also want to add a line to the template for each job. What we'd like to say is something like this:

while (my ($work, $price) = each %jobs) {

  {$work}                           {$price}

      $total += $price;

However, Text::Template doesn't work like that: each snippet of code must be an independent, syntactically correct piece of Perl. So how do we write multiple lines to the template? This is where the magical $OUT variable comes in. If you use $OUT in your template, that's taken as the output from the code snippet. We can append to this variable each time we go through the loop, and it'll all be filled into the template at the end.

>>> More Perl Programming Articles          >>> More By O'Reilly Media

blog comments powered by Disqus
escort Bursa Bursa escort Antalya eskort


- Perl Turns 25
- Lists and Arguments in Perl
- Variables and Arguments in Perl
- Understanding Scope and Packages in Perl
- Arguments and Return Values in Perl
- Invoking Perl Subroutines and Functions
- Subroutines and Functions in Perl
- Perl Basics: Writing and Debugging Programs
- Structure and Statements in Perl
- First Steps in Perl
- Completing Regular Expression Basics
- Modifiers, Boundaries, and Regular Expressio...
- Quantifiers and Other Regular Expression Bas...
- Parsing and Regular Expression Basics
- Hash Functions

Developer Shed Affiliates


Dev Shed Tutorial Topics: