#!/usr/bin/perl use strict; use warnings; # Template-Datei (Quick & Dirty) my $template = '            
       [% loop $story %]            
               

[% $story_title %]

               
                   [% $story_content %]                
           
       [% end %]        
    '; # Name der Loop my $loop_name = "story"; # Array mit Hashes my @array = (    {        story_title   => "Erste Überschrift",        story_content => "Erster Inhalt",    },    {        story_title   => "Zweite Überschrift",        story_content => "Zweiter Inhalt",    }, ); local ($1, $2, $3); # Nach Loop-Muster suchen... $template =~ m/    \[% \s* loop \s* \$ (\S+?) \s* %\]     # [% loop $string %]    (.*?)                                  # $loop_content    \[% \s* end \s* %\]                    # [% end %] /xms; my $loop_content = $2 if $1 eq $loop_name; # Inhalt der Loop (zwischen den Tags) my $result; for my $hash_ref ( @array ) {              # Hashes aus dem Array rausholen    my $temp = $loop_content;              # Loop-Inhalt zwischenspeichern    for my $key ( keys %{$hash_ref} ) {    # Keys der Hashes durchgehen        $temp =~ s/            \[% \s* \$ (\S+?) \s* %\]      # Nach [% $string %] suchen        /                                  # Ersetzen, falls im Hash vorhanden            $hash_ref->{$1} if exists $hash_ref->{$1}        /exms;    }    $result .= $temp; } # Die Loop im Template durch die geparste Loop ersetzen... $template =~ s/    \[% \s* loop \s* \$ (\S+?) \s* %\]    (.*?)    \[% \s* end \s* %\] /    $result /xms; print $template;