Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Perl: Flexibilitaet der Sprache

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.05.2003
    Beiträge
    161

    Perl: Flexibilitaet der Sprache

    Gibt es in Perl eine Moeglichkeit,

    a) in einer Variable enthaltenen Perlcode auszufuehren, ohne auf
    Code:
    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
    .
    Interface design
    whohas - wer hat's im Repository? Debian? Fedora? Gentoo? ...?
    Hardware compatibility list - das Original mit bereits 3000 Einträgen
    It ain't a hack if it ain't dirty.

  2. #2
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    a) eval EXPR (nicht BLOCK).
    b) Was meinst du mit Namespace? Module?

    Gruss, Andy

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.05.2003
    Beiträge
    161
    b) Ich meine, dass z.B. dieser Pseudocode:
    Code:
    my $retval = "hello world\n";
    my $varname = "retval";
    print ${$varname};
    "hello world" ausgeben sollte.

    Danke,

    Samsara
    .
    Interface design
    whohas - wer hat's im Repository? Debian? Fedora? Gentoo? ...?
    Hardware compatibility list - das Original mit bereits 3000 Einträgen
    It ain't a hack if it ain't dirty.

  4. #4
    Registrierter Benutzer
    Registriert seit
    20.10.2005
    Ort
    MATRIX
    Beiträge
    91
    hab zwar nicht so die ahnung von perl, aber in der shell kannst du das lösen:

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

    nutzt


    hoffe es hilft :-)
    Ich will ja die Welt verbessern, aber Gott gibt mir den Quellcode nicht. Aber die Grafik hat er geil hinbekommen!

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.05.2003
    Beiträge
    161
    Zitat Zitat von Mehlwurm
    hab zwar nicht so die ahnung von perl, aber in der shell kannst du das lösen:
    In welcher? In bash gibt
    Code:
    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
    .
    Interface design
    whohas - wer hat's im Repository? Debian? Fedora? Gentoo? ...?
    Hardware compatibility list - das Original mit bereits 3000 Einträgen
    It ain't a hack if it ain't dirty.

  6. #6
    Registrierter Benutzer
    Registriert seit
    20.10.2005
    Ort
    MATRIX
    Beiträge
    91

    sorry

    Code:
     
    #!/bin/bash
    test1=hallo
    test2=$test1
    echo $test2
    hallo
    Ich will ja die Welt verbessern, aber Gott gibt mir den Quellcode nicht. Aber die Grafik hat er geil hinbekommen!

  7. #7
    Registrierter Benutzer
    Registriert seit
    28.05.2003
    Beiträge
    161
    Ne, was ich suche ist (Pseudocode):
    Code:
    #!/bin/bash
    test2="hallo"
    varname="test2"
    echo $$varname
    varname enthaelt einen String, der "test2" lautet. Also EXPLIZIT NICHT
    Code:
    varname=$test2
    Gruss,

    Samsara
    .
    Interface design
    whohas - wer hat's im Repository? Debian? Fedora? Gentoo? ...?
    Hardware compatibility list - das Original mit bereits 3000 Einträgen
    It ain't a hack if it ain't dirty.

  8. #8
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    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:

    Code:
    #!/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...

  9. #9
    Registrierter Benutzer
    Registriert seit
    28.05.2003
    Beiträge
    161
    Vielen lieben Dank, Michael, und auch nochmal RapidMax!

    Samsara
    .
    Interface design
    whohas - wer hat's im Repository? Debian? Fedora? Gentoo? ...?
    Hardware compatibility list - das Original mit bereits 3000 Einträgen
    It ain't a hack if it ain't dirty.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •