Title here
Summary here
Perl offers built-in support for creating dynamic content or showing customized output to the user with the Text::Template
module. This module provides a simple way to generate text using templates.
use strict;
use warnings;
use Text::Template;
use Data::Dumper;
# We can create a new template and parse its body from a string.
# Templates are a mix of static text and expressions enclosed in
# {$...} that are used to dynamically insert content.
my $t1 = Text::Template->new(
TYPE => 'STRING',
SOURCE => 'Value is {$_}',
);
# By "filling in" the template we generate its text with
# specific values for its expressions.
print $t1->fill_in(HASH => { _ => "some text" });
print $t1->fill_in(HASH => { _ => 5 });
print $t1->fill_in(HASH => { _ => Dumper(["Perl", "Python", "Ruby", "PHP"]) });
# If the data is a hash we can use the {$variable} syntax to access
# its keys.
my $t2 = Text::Template->new(
TYPE => 'STRING',
SOURCE => 'Name: {$name}',
);
print $t2->fill_in(HASH => { name => "Jane Doe" });
print $t2->fill_in(HASH => { name => "Mickey Mouse" });
# if/else provide conditional execution for templates. A value is considered
# false if it's undefined, an empty string, 0, or an empty list.
my $t3 = Text::Template->new(
TYPE => 'STRING',
SOURCE => '{if $_}yes{else}no{/if}',
);
print $t3->fill_in(HASH => { _ => "not empty" }), "\n";
print $t3->fill_in(HASH => { _ => "" }), "\n";
# To loop through arrays, we can use Perl's foreach construct within
# the template.
my $t4 = Text::Template->new(
TYPE => 'STRING',
SOURCE => 'Range: {foreach $item (@$_) {$item } }',
);
print $t4->fill_in(HASH => { _ => ["Perl", "Python", "Ruby", "PHP"] }), "\n";
When you run this script, you should see output similar to this:
$ perl templates.pl
Value is some text
Value is 5
Value is $VAR1 = [
'Perl',
'Python',
'Ruby',
'PHP'
];
Name: Jane Doe
Name: Mickey Mouse
yes
no
Range: Perl Python Ruby PHP
In this Perl version:
Text::Template
module for templating.{$...}
instead of {{...}}
.fill_in
method to render templates instead of Execute
.{if}...{else}...{/if}
syntax.foreach
construct directly in the template.Note that Perl’s Text::Template
is more flexible than Go’s text/template in some ways, as it allows arbitrary Perl code in the templates. This can be powerful but also potentially dangerous if used with untrusted input.