Thread Perl Rechner (12 answers)
Opened by MauriZze at 2008-06-16 21:07

murphy
 2008-06-16 21:57
#111088 #111088
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
MauriZze+2008-06-16 19:07:35--
Code (perl): (dl )
1
2
3
[...]
print "Ergebnis\n";
print $zahl1 $function[$f] $zahl2

[...]


Es ist zwar einem Menschen klar, was Du hier tun willst, dem Perlinterpreter kann das aber mangels Typ- und Kontextinformationen nicht klar sein.

Für den Perlinterpreter stehen hier einfach drei Skalare Werte hintereinander, ohne irgendeine Angabe, was damit geschehen soll.

Du musst entweder sagen, dass Du dynamisch Code zusammengebaut hast und ihn ausführen willst:
Code (perl): (dl )
print eval("$zahl1 $function[$f] $zahl2;");


Oder Du musst die Operatoren anders speichern:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@function = (
  sub {
    $_[0] + $_[1];
  },
  sub {
    $_[0] - $_[1];
  },
  sub {
    $_[0] * $_[1];
  },
  sub {
    $_[0] / $_[1];
  }
);
[...]
print $function[$f]->($zahl1, $zahl2);


Auch wenn die erste Variante vielleicht einfacher aussieht, so würde ich stark davon abraten, sie zu verwenden, weil die zweite Variante vermutlich schneller und vor allem sehr viel sicherer und weniger fehleranfällig gegen versehentlich falsch zusammengebaute Ausdrücke ist.

Apropos Fehlerresistenz: Du solltest Dir angewöhnen, jedes Skript mit
Code (perl): (dl )
1
2
use strict;
use warnings;

zu versehen, weil Dir das die Fehlersuche entscheidend erleichtert.
When C++ is your hammer, every problem looks like your thumb.

View full thread Perl Rechner