Herbaer::Replace


Übersicht

use Herbaer::Replace;
my $vorlage = 'Name: ${name}, Wohnort: ${ort}';
my $data    = {"name" => "Herbert", "ort" => "Dorsten"};
my $text    = replace ($vorlage, $data); # 'Name: Herbert, Wohnort: Dorsten'
  

Zweck

Das Modul Replace.pm (Paket Herbaer::Replace) exportiert die Funktion replace, die Platzhalter in Zeichenketten ersetzt.

Funktionen

$text = replace ($vorlage, $daten)
$vorlage

$vorlage ist eine Zeichenkette mit Platzhaltern der Form ${NAME} oder eine Referenz. 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 ${NAME} in der Zeichenkette $vorlage durch $daten -> {'NAME'} ersetzt.

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 -> {KEY} definiert ist, dieser Wert durch den Wert replace ($vorlage -> {KEY}, $daten) ersetzt.

Wenn $vorlage eine ARRAY-Referenz ist, wird jeder definierte Wert VALUE im Array durch den Wert replace (VALUE, $daten) ersetzt.

Wenn $vorlage eine SCALAR-Referenz ist, wird der Variablen, auf die $vorlage verweist, der Wert replace ($$vorlage, $daten) zugewiesen.

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 replace ($vorlage, $datum), wobei $datum alle Komponenten von $daten durchläuft.

Wenn $daten eine HASH-Referenz ist, dann werden in der Zeichenketten-Darstellung von $vorlage Platzhalter der Form ${NAME} ersetzt. Der vorläufige Ersatzwert $d ist $data -> {"NAME"}, falls der HASH-Eintrag existiert, sonst der „fallback”-Wert $data -> {"*"}. Solange $d eine gültige CODE-Referenz ist, wird $p durch das Ergebnis des Funktionsaufrufs ersetzt: $d = $d -> ("NAME"). Wenn $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.

Beispiel

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"

Installation

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.

Anwendungen

Neben anderen Programmen nutzt replace.pl (Quelltext) dieses Modul.