use Herbaer::Replace;
my $vorlage = 'Name: ${name}, Wohnort: ${ort}';
my $data = {"name" => "Herbert", "ort" => "Dorsten"};
my $text = replace ($vorlage, $data); # 'Name: Herbert, Wohnort: Dorsten'
Das Modul Replace.pm (Paket Herbaer::Replace) exportiert die Funktion replace, die Platzhalter in Zeichenketten ersetzt.
$text = replace ($vorlage, $daten)$vorlage$vorlage ist eine Zeichenkette mit Platzhaltern der Form ${ oder eine Referenz. NAME}NAME steht für eine nicht-leere Kette von Kleinbuchstaben „a” bis „z”, Großbuchstaben „A” bis „Z” oder der Zeichen „_” (Unterstrich), „-” (Minus) oder „.” (Punkt).
$daten$daten ist eine Referenz vom Typ HASH oder ARRAY. Wenn $daten eine HASH-Referenz ist, wird ein Platzhalter ${ in der Zeichenkette NAME}$vorlage durch $daten -> {' ersetzt.NAME'}
Wenn $daten keine HASH-Referenz ist oder keinen Eintrag enthält, ist das Ergebnis $vorlage unverändert.
Wenn $vorlage eine Referenz ist, dann ist das Ergebnis $vorlage, aber der referenzierte Wert kann geändert sein.
Wenn $vorlage eine HASH-Referenz ist, wird für jeden Schlüssel KEY, für den der Wert $vorlage -> { definiert ist, dieser Wert durch den Wert KEY} ersetzt.replace ($vorlage -> {KEY}, $daten)
Wenn $vorlage eine ARRAY-Referenz ist, wird jeder definierte Wert VALUE im Array durch den Wert ersetzt.replace (VALUE, $daten)
Wenn $vorlage eine SCALAR-Referenz ist, wird der Variablen, auf die $vorlage verweist, der Wert zugewiesen.replace ($$vorlage, $daten)
In den weiteren beschriebenen Fällen ist $vorlage kein Referenz-Typ. Wenn $daten eine ARRAY-Referenz ist, dann ist das Ergebnis ebenfalls eine ARRAY-Referenz. Die Komponenten des Ergebnisses sind die Werte , wobei replace ($vorlage, $datum)$datum alle Komponenten von $daten durchläuft.
Wenn $daten eine HASH-Referenz ist, dann werden in der Zeichenketten-Darstellung von $vorlage Platzhalter der Form ${ ersetzt. Der vorläufige Ersatzwert NAME}$d ist , falls der $data -> {"NAME"}HASH-Eintrag existiert, sonst der „fallback”-Wert . Solange $data -> {"*"}$d eine gültige CODE-Referenz ist, wird $p durch das Ergebnis des Funktionsaufrufs ersetzt: $d = $d -> (". Wenn NAME")$d schließlich definiert ist und keine Referenz ist, wird der Platzhalter durch den Wert von $d ersetzt. Andernfalls bleibt der Platzhalter unverändert. Das Ergebnis ist eine Zeichenkette mit den eingesetzten Werten anstelle der Platzhalter.
Der folgende Code
use Herbaer::Replace ;
my $vwnr = 0;
my $vwmodelle = ["Golf", "Passat", "Leguan oder so?"];
sub vw {
my $m = $vwmodelle -> [$vwnr++];
$vwnr %= 3;
$m;
};
my $vorl = "\${auto}: \${modell}\n";
my $ref = \$vorl;
my $data = [
{"auto" => "VW - Das Auto", "modell" => \&vw },
{"auto" => "VW - Das Auto", "modell" => \&vw },
{"auto" => "VW - Das Auto", "modell" => \&vw },
{"auto" => "BMW", "*" => "Aus Freude am Fahren" },
{"auto" => "Opel", "*" => "\"Opel fahn iss wie wenze fliechs\"" },
];
replace ($ref, $data);
for my $t (@$$ref) {
print $t;
}gibt aus:
VW - Das Auto: Golf VW - Das Auto: Passat VW - Das Auto: Leguan oder so? BMW: Aus Freude am Fahren Opel: "Opel fahn iss wie wenze fliechs"
Die Datei Replace.pm wird unter dem Teilpfad Herbaer/Replace.pm des Suchpfades für Perl-Module (@INC) gesucht. Auf meinem Rechner ist /usr/local/share/perl/5.10.1/Herbaer/Replace.pm ein symbolischer Verweis.
Neben anderen Programmen nutzt replace.pl (Quelltext) dieses Modul.