Thread String interpretieren, Variable in Variable (17 answers)
Opened by dasa at 2008-08-19 12:59

dasa
 2008-08-19 12:59
#113681 #113681
User since
2008-08-19
4 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

gleich zu meiner Entschuldigung, ich programmiere z.Z. an einem TWiki Plugin, und dies verwendet teilweise unschöne Syntax, und genau diese ist auch die Quelle meines Problems:

Also erstmal lese ich vom System einen String ein:

Code (perl): (dl )
1
2
3
4
5
6
7
8
my $output = &TWiki::Func::getPreferencesValue( "MYPLUGIN_OUTPUT" );

# Dies hat den Inhalt:
# __[[$MYWEB][$MYTOPIC]]__
# nun wird im System gerade die beiden Variablen auch gesetzt

my $MYWEB = "TWiki";
my $MYTOPIC = "WebHome";


Nun die Frage (wohl schon einigen nach dem Beispiel klar), ich möchte nun gern dass der Output- String die Variablen selbst interpretiert, ohne dass ich mit Regex zur Hand muss.

Also irgendwas wie
Code (perl): (dl )
1
2
$output = do something with $output; 
print $output; # Gibt dann __[[TWiki][WebHome]]__



Nun fragt ihr euch, warum schreibt er nicht nen Regex für die beiden Fälle, oder, noch besser, das ganze gelöst mit einem Hash, hab ich nun auch, aber vielleicht gibt es in Perl eine Lösung dies noch kürzer zu machen. Der Workaround:

Code (perl): (dl )
1
2
3
4
$varHash{WEB} = &TWiki::Func::getPreferencesValue( "WEB" );
$varHash{TOPIC} = &TWiki::Func::getPreferencesValue( "TOPIC" );
...
$output =~ s/\$(\w+)/$varHash{$1}/mg;

View full thread String interpretieren, Variable in Variable