PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: Flexibilitaet der Sprache



samsara
05-12-2005, 19:34
Gibt es in Perl eine Moeglichkeit,

a) in einer Variable enthaltenen Perlcode auszufuehren, ohne auf

system 'perl -e "'.$code.'"';
zurueckgreifen zu muessen?

b) einen Variablennamen aus einer Variablen auszulesen (entspricht etwa einem Pointer (die es ja auch in Perl gibt), ich suche aber explizit eine namespace-orientierte Loesung)

Danke,

Samsara
.

RapidMax
05-12-2005, 20:26
a) eval EXPR (nicht BLOCK).
b) Was meinst du mit Namespace? Module?

Gruss, Andy

samsara
06-12-2005, 20:34
b) Ich meine, dass z.B. dieser Pseudocode:

my $retval = "hello world\n";
my $varname = "retval";
print ${$varname};
"hello world" ausgeben sollte.

Danke,

Samsara
.

Mehlwurm
09-12-2005, 07:24
hab zwar nicht so die ahnung von perl, aber in der shell kannst du das lösen:

...
varname=$"retval"
...

nutzt


hoffe es hilft :-)

samsara
09-12-2005, 11:17
hab zwar nicht so die ahnung von perl, aber in der shell kannst du das lösen:In welcher? In bash gibt

echo $"retval"
Nur "retval" aus. Vielleicht mal das komplette Codebeispiel posten?

Um den Sinn meiner Frage zu erklaeren: wie schon gesagt, geht es im Prinzip um pointers, ABER: einfachstes Beispiel, man soll einen string von cmdline einlesen koennen und dann den Wert der Variablen ausgeben, deren Name dem Wert des Strings entspricht. Damit kann man sich so allerhand if- bzw. case-Konstrukte ersparen - der Code wird sehr viel sauberer!

Danke,

Samsara
.

Mehlwurm
09-12-2005, 12:06
#!/bin/bash
test1=hallo
test2=$test1
echo $test2
hallo

samsara
09-12-2005, 14:10
Ne, was ich suche ist (Pseudocode):

#!/bin/bash
test2="hallo"
varname="test2"
echo $$varname

varname enthaelt einen String, der "test2" lautet. Also EXPLIZIT NICHT

varname=$test2

Gruss,

Samsara
.

michael.sprick
09-12-2005, 16:47
Hallo Samsara,

die Sache die Du dort beschreibst nennt man symbolische refrenz - siehe auch perldoc perlref:


$name = "foo";
$$name = 1; # Sets $foo
${$name} = 2; # Sets $foo
${$name x 2} = 3; # Sets $foofoo
$name->[0] = 4; # Sets $foo[0]
@$name = (); # Clears @foo


Dein Pseudocode war schon ziemlich nah dran:



#!/usr/bin/perl

$foo="Hello World!\n";
$bar="foo";
print $$bar;


In der Regel gibt es aber eine elegantere Alternative zu symbolischen Referenzen. zum Beispiel assoziative Arrays -> Hashtables...

samsara
09-12-2005, 23:39
Vielen lieben Dank, Michael, und auch nochmal RapidMax!

Samsara
.