suche/ersetzen per regulären befehl und wildcards ?
jenk heidsen
- perl
hallo leute,
ich hab ein ziemlich langes konstrukt in der art:
$template =~ s/<!--b-->/$b/g;
$template =~ s/<!--c-->/$c/g;
$template =~ s/<!--d-->/$d/g;
$template =~ s/<!--e-->/$e/g;
(...)
um variablen in den entsprechenden templates zu ersetzen.
mein frage ist nun, kann ich diese prozedur abkürzen,
statt jede variable/jeden platzhalter in einer extrazeile
auszutauschen ?
vielen dank für jede hilfe,
jenk.
Halihallo jenk
mein frage ist nun, kann ich diese prozedur abkürzen,
statt jede variable/jeden platzhalter in einer extrazeile
auszutauschen ?
Ja. Iteriere über einen Hash und generiere das RegExp-Muster automatisch.
Viele Grüsse
Philipp
Iteriere über einen Hash und generiere das RegExp-Muster automatisch.
sorry, ich versteh da nur bahnhof :(
Hi,
so etwas sollte gehen:
$template =~ s/<!--(\w)-->/${$1}/g;
Gruss,
Frédéric
$template =~ s/<!--(\w)-->/${$1}/g;
nein, geht leider nicht :( die platzhalter werden
nicht ersetzt...
Halihallo jenk
$template =~ s/<!--(\w)-->/${$1}/g;
nein, geht leider nicht :( die platzhalter werden
nicht ersetzt...
<code ver="1">
$a = '15';
$b = '27';
$template = "'<!--a-->
test <!--b-->'";
print 'Anzahl: ' . ($template =~ s/<!--(\w)-->/${$1}/sg) . "\n";
print $template;
</code>
<code ver="2">
my $a = '15';
my $b = '27';
$template = "'<!--a-->
test <!--b-->'";
print 'Anzahl: ' . ($template =~ s/<!--(\w)-->/${$1}/sg) . "\n";
print $template;
</code>
Code 1 funktioniert bei mir, Code 2 nicht. Unterschied: Variablen $a, $b sind einmal
nur im aktuellen Scope definiert, das andere Mal global. Die Variablen müssen folglich
global definiert sein? - Halte ich für komisch, macht jedoch den Anschein...
Viele Grüsse
Philipp
use Mosche;
my $a = '15';
my $b = '27';
$template = "'<!--a-->
test <!--b-->'";
print 'Anzahl: ' . ($template =~ s/<!--(\w)-->/${$1}/sg) . "\n";
print $template;
Code 1 funktioniert bei mir, Code 2 nicht. Unterschied: Variablen $a, $b sind einmal
nur im aktuellen Scope definiert, das andere Mal global. Die Variablen müssen folglich
global definiert sein? - Halte ich für komisch, macht jedoch den Anschein...
Scheint daran zu liegen, wie Perl mit dem ${} Konstrukt umgeht - es scheint nur auf Package-Variablen von main:: zugreifen zu können (was private Variablen nicht sind).
Besser ist allerdings die von dir bereits genannte Möglichkeit mit dem Hash.
my %s;
$s{a} = '15';
$s{b} = '27';
foreach (keys %hash) {
$template =~ s/$_/$s{$_}/gs;
}
use Tschoe qw(Matti);
Halihallo Matti
Scheint daran zu liegen, wie Perl mit dem ${} Konstrukt umgeht - es scheint nur auf Package-Variablen von main:: zugreifen zu können (was private Variablen nicht sind).
Denke ich auch und es ist auch verständlich, da dies für die Perl-Porters einfacher
umzusetzen war... Auf die Symbol-Table lässt sich wesentlich einfacher zugreifen, als
auf BLOCK-Scope definierte Variablen. Waren die Porters wiedermal zu faul :-)
... wenn ich mich nicht irre, Angaben wie immer ohne Gewähr...
Besser ist allerdings die von dir bereits genannte Möglichkeit mit dem Hash.
foreach (keys %hash) {
^^^^^ s/%hash/%s/g :-)
Viele Grüsse
Philipp