Variablen in Perl

  • Hi,


    bin gerade ein bischen am Perl-Scripten und hänge :evil:


    Bei fli4l (als Shell-Script) gibt es eine Veriablen-Deklaration wie folgt:


    eval options='$RRDTOOL_'$idx'_OPTIONS'


    Da gibts doch sicher ein Pendant für Perl dazu. Kann mir hier jemand bitte spontan aushelfen. Hab mir schon fast einen Wolf im Net gesucht.


    TIA!

  • Hi,


    Vielen Dank schon mal für die Antworten.


    pidel:
    Auf die Seite bin ich schon gestoßen. Allerdings half sie mir nicht wirklich weiter.


    FireFly:
    Sorry, aber das scheint nicht zu funktionieren. Weder in deiner Form, noch wenn ..'{$idx}'... geschrieben wird. Also wenn $ in der Klammer steht.


    Übrigens bin ich mit der print-Funktion soweit schon gekommen:
    print "\$RRDTOOL_\$idx_COMMENT";
    print "\$RRDTOOL_",$idx,"_COMMENT";
    aber weiter komme ich leider nicht, daß der Inhalt der Hauptvariable ausgegeben wird.


    @blazko:
    Sorry, auch dein Vorschlag geht nicht.....


    Zur Info:
    Ich versuch für meinen linvdr das opt_rrdtool anzupassen. Allerdings sollen die cgi-skripte mit perl statt der s´hell interpretiert werden.

  • Rehi,


    erklaere mal genauer, was Du hier mit "Hauptvariable" meinst, was genau klappt nicht bei print? Ggf. kannst Du in der zweiten Variante Punkte anstelle Kommata nehmen.
    Die Variante von Firefly kenne ich in Perl nicht (mit den Klammern) - so schreibt man das eher bei JSP oder XSL (glaube ich).


    Gruss,
    Timo

    yaVDR 0.4-pre1 on ASUS 1015PN -> Big Screen and XBMC remote on Android.

  • Genial. Mit Punkten klappts :arme


    Zum Hintergrund:
    Es gibt eine Konfigurationsdatei (hier etwas verkürzt):


    Code
    $RRDTOOL_N=2;
    $RRDTOOL_1_COMMENT="System";
    $RRDTOOL_2_COMMENT="lm_sensors";


    Der erste Eintrag gibt an, wieviel Einträge vorhanden sind. Dementsprechend werden mit einer Schleife alle Informationen für eine Website erzeugt.


    Mein Beispiel:

    Perl
    #!/usr/bin/perl
    
    
    require "/pub/web/cgi-bin/rrdtool.cfg";
    
    
    $idx=$RRDTOOL_N;
    print "\$RRDTOOL_\$idx_COMMENT\n";
    print "\$RRDTOOL_".$idx."_COMMENT\n";
    print eval "\$RRDTOOL_".$idx."_COMMENT\n";


    Was als Ausgabe kommt:

    Code
    $RRDTOOL_$idx_COMMENT
    $RRDTOOL_2_COMMENT
    lmsensors


    Vielen Dank für eure Hilfe!


    BTW: Worin liegt denn eigentlich der Unterschied zwischen Punkt und Komma in meinem Fall?

  • Hiho!


    Die Kommata bewirken eine Ausgabe "nacheinander" und fügen (glaube ich) Leerzeichen ein - während der Punkt in diesem Kontext der "Konkatenator" ist und Strings 1:1 zusammenfügt. Er wirkt wie der + Operator bei Strings in Java etc.


    Gruß,
    Timo

    yaVDR 0.4-pre1 on ASUS 1015PN -> Big Screen and XBMC remote on Android.

  • Zitat

    Original von killajoe
    Es gibt eine Konfigurationsdatei (hier etwas verkürzt):


    Code
    $RRDTOOL_N=2;
    $RRDTOOL_1_COMMENT="System";
    $RRDTOOL_2_COMMENT="lm_sensors";


    Der erste Eintrag gibt an, wieviel Einträge vorhanden sind. Dementsprechend werden mit einer Schleife alle Informationen für eine Website erzeugt.


    Mein Beispiel:

    Perl
    #!/usr/bin/perl
    
    
    require "/pub/web/cgi-bin/rrdtool.cfg";
    
    
    $idx=$RRDTOOL_N;
    print "\$RRDTOOL_\$idx_COMMENT\n";
    print "\$RRDTOOL_".$idx."_COMMENT\n";
    print eval "\$RRDTOOL_".$idx."_COMMENT\n";


    Genaugenommen ist das aber ziemlich grauslig.


    eval() von Strings ist sowieso evil, natürlich besonders, wenn der User Teile des Strings bestimmen kann.


    Das require macht aus der Konfigurationsdatei Perl-Code, der ist aber nur ohne "strict" gültig (jede Menge undeklarierte Variablen etc.)


    Also wenn du es "richtig" machen willst, zwei Möglichkeiten:


    Entweder du kannst die Konfigurationsdatei ändern, dann ist das einfach:

    Code
    our @RRDTOOL_COMMENTS=qw/System lm_sensors/;


    und einfach mit $RRDTOOL_COMMENTS[$idx] zugreifen.


    Oder die Konfigurationsdatei MUSS so aussehen, in dem Fall würde ich n kleinen Parser dafür schreiben, etwa so (ungetestet direkt in's Board getippt):


    (passend erweitern für sonstige Syntax im Konfig-File)

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!