Perl string zwischen Hochkomma und Anführunsgzeichen wandeln

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von aktivfrühstück, 13.02.2009.

  1. #1 aktivfrühstück, 13.02.2009
    aktivfrühstück

    aktivfrühstück Eroberer

    Dabei seit:
    19.03.2007
    Beiträge:
    66
    Zustimmungen:
    0
    Hey Leute,
    hab ne Frage.

    Möchte eine Formel in einer Perl Ausgabe darstellen.

    als Beispiel:
    Zeile im Skript:Formel: $ergebnis = $wert1 + $wert 2 / $wert3

    zum kontrollieren ob diese Formel richtig funktioniert benötige ich folgende Ausgabe in einer Print-Anweisung:
    Code:
    1.Zeile: $ergebnis = $wert1 + $wert 2 / $wert3  # zeigt mir wie die Variablen heißen (Darstellung als String)
    2.Zeile: 10 = 5 + 10 / 2 # zeigt mir den aktuellen Ihnahlt dieser Variablen
    

    Ziel ist es die Formel, welche Zentral im Skript steht verändern zu können, sodass sich automatisch die Ausgabe in einer Printanweisung anpasst.

    Ich muß also einmal die Formel als Quellcode speichern um Zeile 1 zu bekommen. Dann muß die Formel als Zahlen gespeichert werden um sie berechnen zu können und als letztes muß sie berechnet werden.

    1.Als Quellcode speichern-> kein Problem (Ausgabe Zeile 1)
    Code:
    $quellcode = '$ergebnis = $wert1 + $wert 2 / $wert3';
    2.ergebnis berechnen-> kein Problem mittels eval() Funktion (Ausgabe Zeile 2 -> Ergebnis)
    Code:
    $ergebnis = eval "$quellcode";
    Jetzt kommt das Problem:
    Wie kann ich den Inhalt von $quellcode so konvertieren, dass perl es interpretiert als würde die Zeile wiefolgt aussehen:
    Code:
    $quellcode = "$ergebnis = $wert1 + $wert 2 / $wert3"; # Doppelhochkomma ist wichtig-> pperl interpretiert nun die Werte der Variablen in der Ausgabe als Zahlen und nicht als String
    Hoffe das war nicht zu kompliziert... Vll gibt es auch noch einen anderen Weg um zum Ziel zu gelangen und jmd kennt den:)
    Viele Grüße
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. mcas

    mcas Routinier

    Dabei seit:
    29.12.2005
    Beiträge:
    398
    Zustimmungen:
    0
    Hi,

    versuch mal die $-Zeichen mit einem \ zu escapen, dann sollte es gehen.

    Viele Grüße
    Marcus
     
  4. #3 aktivfrühstück, 13.02.2009
    aktivfrühstück

    aktivfrühstück Eroberer

    Dabei seit:
    19.03.2007
    Beiträge:
    66
    Zustimmungen:
    0
    Mittels PaternMatching die $ von $quellcode nach \$ ?
    Also suchen und erezten?
     
  5. #4 Gott_in_schwarz, 16.02.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Ich würds so machen:
    Code:
    use strict;
    use warnings;
    
    my $foo = 43;
    my $bar = 3.14;
    my $formula = '$foo + $bar';
    
    my $result = eval $formula;
    my $resolved = eval "qq{$formula}";
    print "$resolved == $result\n";
    
    $foo = 17;
    $bar = 23;
    
    $result = eval $formula;
    $resolved = eval "qq{$formula}";
    print "$resolved == $result\n";
    Aber bedenke: stringeval ist evil. Wenn die Werte vom User eingelesen werden, kann dieser quasi unbegrenzt perlcode einschleusen, der dann unter dem Benutzer, unter dem das Skript gestartet wurde ausgeführt wird.
    Für den Fall, dass du das Skript irgendwo "öffentlich" laufen lassen willst, würde ich dir für eval das (in der Core Distribution vorhandene) Safe Modul empfehlen.

    Es gibt auch ein Modul auf cpan, das solche Formeln evaluiert ohne die eval Funktion. Das wäre der sicherste Weg, mir fällt nur grade der Name des Moduls nicht mehr ein.
     
  6. Flocke

    Flocke Eroberer

    Dabei seit:
    28.12.2007
    Beiträge:
    56
    Zustimmungen:
    0
    Ort:
    Magdeburg, Germany
    Meinst du das hier:
    Math::Expression::Evaluator

    Hab ich auch neulich in meinem Bot einbauen müssen weil eval ganz böse ist :devil:
     
Thema:

Perl string zwischen Hochkomma und Anführunsgzeichen wandeln

Die Seite wird geladen...

Perl string zwischen Hochkomma und Anführunsgzeichen wandeln - Ähnliche Themen

  1. Perl - Zeichen in String einfügen

    Perl - Zeichen in String einfügen: Hi, ich habe eine zeichenkette z.B. $string = "Halloo Bla blubb"; wenn ich mir mit Index jetzt eine Position raussuche an der ich ein...
  2. [PERL] Mit Regex kompletten String durchsuchen und ersetzen

    [PERL] Mit Regex kompletten String durchsuchen und ersetzen: Hallo alle zusammen, ich habe ein Problem mit Regex in einem Perlscript. Ich möchte eine Templatedatei einlesen, bestimmte Werte ersetzen und...
  3. PERL: String in Logfile finden

    PERL: String in Logfile finden: Hallo, ich habe ein Mailllog mit folgenden Einträgen: [61.219.90.222], reject=553 5.3.0 Mail fromIP 61.219.90.222 rejected - see...
  4. Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern

    Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern: Das Hyperledger-Projekt der Linux Foundation will eine neue Form der dezentralisierten Kontoführung nach dem Prinzip der »distributed ledger« bei...
  5. Perl 6 offiziell vorgestellt

    Perl 6 offiziell vorgestellt: Wie erwartet, ist die Version C(hristmas) von Perl 6 veröffentlicht worden. Perl 6 stellt nicht, wie der Name suggeriert, einen Nachfolger von...