Class::MakeMethods::Utility::TextBuilder - Basic text substitutions
print text_builder( $base_text, @exprs )
This module provides a single function, which implements a simple "text
macro" mechanism for assembling templated text strings.
$expanded_text = text_builder( $base_text, @exprs )
Returns a modified copy of $base_text using rules from the @exprs list.
The @exprs list may contain any of the following:
- •
- A string, in which any '*' characters will be replaced by
the base text. The interpolated string then replaces the base text.
- •
- A code-ref, which will be called with the base text as its
only argument. The result of that call then replaces the base text.
- •
- A hash-ref, which will be added to the substitution hash
used in the second pass, below.
- •
- An array-ref, containing additional expressions to be
treated as above.
After any initial string and code-ref rules have been applied, the hash of
substitution rules are applied.
The text will be searched for occurrences of the keys of the substitution hash,
which will be modified based on the corresponding value in the hash. If the
substitution key ends with '{}', the search will also match a balanced block
of braces, and that value will also be used in the substitution.
The hash-ref may contain the following types of rules:
- •
- 'string' => 'string'
Occurrences of the first string are to be replaced by the second.
- •
- 'string' => code_ref
Occurrences of the string are to be replaced by the results of calling the
subroutine with no arguments.
- •
- 'string{}' => 'string'
Occurrences of the first string and subsequent block of braces are replaced
by a copy of the second string in which any '*' characters have first been
replaced by the contents of the brace block.
- •
- 'string{}' => code_ref
Occurrences of the string and subsequent block of braces are replaced by the
results of calling the subroutine with the contents of the brace block as
its only argument.
- •
- 'string{}' => hash_ref
Occurrences of the string and subsequent block of braces are replaced by
using the contents of the brace block as a key into the provided
hash-ref.
The following text and modification rules provides a skeleton for a collection
letter:
my $letter = "You owe us AMOUNT. Please pay up!\n\n" .
"THREAT{SEVERITY}";
my @exprs = (
"Dear NAMEm\n\n*",
"*\n\n-- The Management",
{ 'THREAT{}' => { 'good'=>'Please?', 'bad'=>'Or else!' } },
"\t\t\t\tDATE\n*",
{ 'DATE' => 'Tuesday, April 1, 2001' },
);
One might invoke this template by providing additional data for a given instance
and calling the text_builder function:
my $item = { 'NAME'=>'John', 'AMOUNT'=>'200 camels', 'SEVERITY'=>'bad' };
print text_builder( $letter, @exprs, $item );
The resulting output is shown below:
Tuesday, April 1, 2001
Dear John,
You owe us 200 camels. Please pay up!
Or else!
-- The Management
See Class::MakeMethods for general information about this distribution.