Falk Pauser: strings zu variablen? aehnlich "eval" in javascript - aber wie?

hi!

ich habe ein simples problem:

$variTest "hallo Welt"
print "$vari"+"Test";

das ganze soll bewirken, dass aehnlich "eval()" in javascript eine variable aus einem string gebildet wird. ist das moeglich? und wie geht das am einfachsten?

mfg
-p-

  1. Hi,

    das ganze soll bewirken, dass aehnlich "eval()" in javascript eine variable aus einem string gebildet wird. ist das moeglich? und wie geht das am einfachsten?

    *hüstel* mit eval.

    Übrigens ist das eine Perl-Frage und hat nicht das geringste mit CGI zu tun.

    Cheatah

    1. hi cheata,

      *hüstel* mit eval.

      Übrigens ist das eine Perl-Frage und hat nicht das geringste mit CGI zu tun.

      danke für deine antwort - ich bin also auf dem richtigen weg (kann dein hüstel schon verstehen) - habenauch schon einiges versucht, bekomme aber nicht das gewünschte ergebnis - könntest du mit einem klitzekleinen beispiel dienen?? danke!

      mfg
      -p-

  2. hi!

    das ganze soll bewirken, dass aehnlich "eval()" in javascript eine
    variable aus einem string gebildet wird. ist das moeglich? und wie
    geht das am einfachsten?

    === cut ===
    #!/usr/bin/perl

    $varname = "newvar";
    ${$varname} = "Hello World!";
    print $newvar;
    === cut ===

    eval() gibt es übrigens auch in Perl, siehe:
      perldoc -f eval
    Aber obige Methode ist für diesen Zweck natürlich besser geeignet.

    bye, Frank!

    1. hi frank!

      === cut ===
      #!/usr/bin/perl

      $varname = "newvar";
      ${$varname} = "Hello World!";
      print $newvar;
      === cut ===

      danke!! das war genau, was ich suchte (wie einfach... naja, aber man muss es eben trotzdem wissen:)

      mfg
      -p-

  3. Hallo Falk,

    $variTest "hallo Welt"

    ^....(=)

    print "$vari"+"Test";

    ^.... Du meinst bestimmt .
    Ich mach mal hier weiter, weil ich zu faul bin, Deine "Beispiele" zu kopieren ;-)

    Es gibt natürlich mehrere Möglichkeiten, eval in den obigen Zusammenhang zu bringen.

    1. Beim Erstellen der Variable:
         eval '$variTest = "Hallo Welt"'; # initialisiert die Variable $variTest.
         eval "$$name = "Hallo Welt""; # initialisiert ein Variable deren Bezeichner in $name steht.
         eval { $$name = "Hallo Welt" }   # s.o.

    2. Beim Auslesen
         print eval "$$name"; # liefert den Wert der Variable deren Bezeichner in $name steht zurück
         print eval { $$name } # s.o.
        
      Zu Unterschieden zwischen Block- und Stringevaluierung siehe den von Frank erwähnten Abschnitt in der perldoc :-)

    Gruß AlexBausW

    P.S.: Noch eine Anmerkung zu Franks Posting:
          Da man eigentlich immer das Pragma "use strict;" verwenden sollte (was Du ja sicherlich auch tust), musst Du imho & afaik entweder 'refs' davon "ausschließen", oder den Code in einem Block mit "no strict 'refs';" verwenden, sonst hagelt es Fehlermeldungen wegen Verwendung symbolischer Referenzen.

    Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html