Thread Beispiel für die (sichere?) Verwendung von eval (12 answers)
Opened by Ronnie at 2008-09-28 12:44

Ronnie
 2008-09-28 12:44
#114996 #114996
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
"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

View full thread Beispiel für die (sichere?) Verwendung von eval