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.