Punkt vor Strich

Punkt vor Strich

am 15.05.2006 16:07:44 von Axel Lindemann

Hallo NG,

mal eine Frage von einem totalen Anfänger: Wie kann ich einem
Perlprogramm die Punkt-vor-Strich-Regel beibringen. Ich möchte also
Aufgaben wie 1+2*3/4 korrekt berechnet wissen. Anzahl an
Zahlen/Operatoren soll beliebig groß sein dürfen.

Danke für jeden freundlichen Hinweis!

Re: Punkt vor Strich

am 15.05.2006 16:31:11 von Daniel Fischer

Axel Lindemann!

> mal eine Frage von einem totalen Anfänger: Wie kann ich einem
> Perlprogramm die Punkt-vor-Strich-Regel beibringen. Ich möchte also
> Aufgaben wie 1+2*3/4 korrekt berechnet wissen. Anzahl an
> Zahlen/Operatoren soll beliebig groß sein dürfen.

Je nach Hintergrund der Frage:

Antwort 1: Das macht perl schon richtig.

Antwort 2: Besuch ein paar Compilerbau-Vorlesungen.


Gruß
Daniel

Re: Punkt vor Strich

am 15.05.2006 16:32:34 von Paul Hink

Axel Lindemann wrote:

> Wie kann ich einem Perlprogramm die Punkt-vor-Strich-Regel
> beibringen. Ich möchte also Aufgaben wie 1+2*3/4 korrekt berechnet
> wissen. Anzahl an Zahlen/Operatoren soll beliebig groß sein dürfen.

Was gefällt dir am Standardverhalten von Perl nicht?

| $ perl -e '$r = 1+2*3/4; print "$r\n";'
| 2.5
| $

Das Ergebnis scheint mir vollkommen korrekt zu sein.

Paul

Re: Punkt vor Strich

am 15.05.2006 16:45:15 von Axel Lindemann

Wie gesagt, ich bin Anfänger, also seit nachsichtig. Wenn ich

#!/usr/bin/perl -w

chomp ($eingabe = );
print $eingabe;

eingebe, kriege ich '1+2*3/4' zurück.


Paul Hink schrieb:
>
> Was gefällt dir am Standardverhalten von Perl nicht?
>
> | $ perl -e '$r = 1+2*3/4; print "$r\n";'
> | 2.5
> | $
>
> Das Ergebnis scheint mir vollkommen korrekt zu sein.
>
> Paul

Re: Punkt vor Strich

am 15.05.2006 16:51:50 von Thomas Wittek

Axel Lindemann schrieb:
> Wie gesagt, ich bin Anfänger, also seit nachsichtig. Wenn ich
>=20
> #!/usr/bin/perl -w
>=20
> chomp ($eingabe =3D );
> print $eingabe;
>=20
> eingebe, kriege ich '1+2*3/4' zurück.

Natürlich. Das Programm soll ja auch nur ausgeben, was du eingegeben ha=
st.

Wenn du die Eingabe _auswerten_ (Hint: Engl. Übersetzung evaluate)
willst, musst du das im Programm auch so schreiben!

Z.B.:

print eval($eingabe);

Ist allerdings gefährlich, da eine Eingabe der Art "`rm -rf /`"
respektive "`del /S /F c:\`" deine (erste) Platte(n) löscht.

-Thomas

Re: Punkt vor Strich

am 15.05.2006 16:57:50 von Axel Lindemann

OK, danke, dass mit dem eval kannte ich noch nicht. Wieso wertet aber
Perl in dem Beispiel von Paul Hink den Ausdruck auch ohne eval aus?


Thomas Wittek schrieb:
>
> Natürlich. Das Programm soll ja auch nur ausgeben, was du eingegeben hast.
>
> Wenn du die Eingabe _auswerten_ (Hint: Engl. Übersetzung evaluate)
> willst, musst du das im Programm auch so schreiben!
>
> Z.B.:
>
> print eval($eingabe);
>
> Ist allerdings gefährlich, da eine Eingabe der Art "`rm -rf /`"
> respektive "`del /S /F c:\`" deine (erste) Platte(n) löscht.
>
> -Thomas

Re: Punkt vor Strich

am 15.05.2006 17:31:47 von frank

Axel Lindemann wrote:

> OK, danke, dass mit dem eval kannte ich noch nicht. Wieso wertet aber
> Perl in dem Beispiel von Paul Hink den Ausdruck auch ohne eval aus?

Weil der rechts von einem Gleichheitszeichen steht, zum Beispiel.

>
> Thomas Wittek schrieb:
>> Natürlich. Das Programm soll ja auch nur ausgeben, was du eingegeben
>> hast.

http://www.afaik.de/usenet/faq/zitieren/

Gruß, Frank
--
> ich wusste mal einen Befehl, der die Ausgabe auf stdout noch zusätzlich
> in eine Datei umlenken konnte... Bitte helft mir auf die Sprünge.
"kaffee" war es nicht.

Re: Punkt vor Strich

am 15.05.2006 17:32:13 von Markus Merkl

Axel Lindemann schrieb:
> OK, danke, dass mit dem eval kannte ich noch nicht. Wieso wertet aber
> Perl in dem Beispiel von Paul Hink den Ausdruck auch ohne eval aus?

Weil Perl angewiesen wird, das Ergebnis des Ausdrucks (1+2*3/4) auszugeben.

(auch kurz geschrieben als perl -l -e 'print 1+2*3/4')

--
Markus

Well, enough clowning around. Perl is, in intent, a cleaned up and
summarized version of that wonderful semi-natural language known as
"Unix". -- Larry Wall in <1994Apr6.184419.3687@netlabs.com>

Re: Punkt vor Strich

am 15.05.2006 17:34:03 von Ferry Bolhar

Axel Lindemann:

> mal eine Frage von einem totalen Anfänger: Wie kann ich einem
> Perlprogramm die Punkt-vor-Strich-Regel beibringen. Ich möchte also
> Aufgaben wie 1+2*3/4 korrekt berechnet wissen. Anzahl an
> Zahlen/Operatoren soll beliebig groß sein dürfen.

print 1+2*3/4;

2.5

was absolut richtig ist. Perl kennt die Punkt-vor-Strich-Regel.

Wo liegt dein Problem?

LG, Ferry

--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at

Re: Punkt vor Strich

am 16.05.2006 13:19:50 von Ferdinand Ihringer

Axel Lindemann wrote:

> Wie gesagt, ich bin Anfänger, also seit nachsichtig. Wenn ich
>
> #!/usr/bin/perl -w
>
> chomp ($eingabe = );
> print $eingabe;
>
> eingebe, kriege ich '1+2*3/4' zurück.

Dir hilft perl-bison und ein Buch über formale Grammatiken.

Ferdinand

--
Immortality consists largely of boredom.
-- Zefrem Cochrane, "Metamorphosis", stardate 3219.8

Re: Punkt vor Strich

am 17.05.2006 10:41:02 von Ralf Muschall

Ferdinand Ihringer wrote:

> Dir hilft perl-bison und ein Buch über formale Grammatiken.

Das ist Overkill - Parse::RecDescent reicht völlig. Bücher
sind allerdings nie schlecht.

Ralf

Re: Punkt vor Strich

am 17.05.2006 13:21:15 von Ferdinand Ihringer

Ralf Muschall wrote:

> Ferdinand Ihringer wrote:
>
>> Dir hilft perl-bison und ein Buch über formale Grammatiken.
>
> Das ist Overkill - Parse::RecDescent reicht völlig.

Will ich nicht bestreiten. Aber hierfür sollte man anscheinend trotzdem
wisen, was Grammatiken sind.

> Bücher
> sind allerdings nie schlecht.

Stimmt.

Ferdinand

P.S.: Mit Perl-Regexen geht Rekursion. Das wäre ein (wenn auch schlecht zu
lesender) Ansatz. ;-)