Thread Beispiel für die (sichere?) Verwendung von eval
(12 answers)
Opened by Ronnie at 2008-09-28 12:44
"eval is evil!" - gehört zu den meist verwendeten Sätzen, wenn man auf eval zu sprechen kommt. Ich möchte mal folgendes kleines Skript zur Diskussion stellen, das ich für einen Freund geschrieben habe um ihm zu zeigen, wie seine C++ Programmieraufgabe in einer Skriptsprache eleganter gelöst werden könnte.
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #!/usr/bin/perl use strict; use warnings; use Readonly; Readonly my $SIGN => qr{[+-]?}; Readonly my $NUMBER => qr{\d+\.?\d*}; Readonly my $OP => qr{[\+\-\*\/]}; Readonly my $SPACES => qr{\s*}; Readonly my $VAL => qr{ $SPACES ( $SIGN $NUMBER ) $SPACES }x; Readonly my $EXPR => qr{ $SPACES ( $SIGN $NUMBER $SPACES $OP $SPACES $SIGN $NUMBER ) $SPACES }x; print "Rechenbeispiel eingeben: "; my $task = <STDIN>; chomp($task); my ($expr, $guessed_value) = $task =~ m{^ $EXPR = $VAL $}x;# die "unvalid expression!\n" unless $expr; die "unvalid value!\n" unless $guessed_value; my $true_value = eval ($expr); print $guessed_value == $true_value ? "Rechnung ist richtig!\n" : "Rechnung ist falsch! Ergebnis ist $true_value\n"; Natürlich hätte es andere Wege gegeben die Aufgabe zu lösen, aber ich finde eval an dieser Stelle einfach, nützlich und sicher. Spricht aus eurer Sicht etwas dagegen? Gruß, Ronnie |