Punkt vor Strich

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!
Axel Lindemann [ Mo, 15 Mai 2006 16:07 ] [ ID #1315814 ]

Re: Punkt vor Strich

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
Daniel Fischer [ Mo, 15 Mai 2006 16:31 ] [ ID #1315815 ]

Re: Punkt vor Strich

Axel Lindemann <tmp2001 [at] arcor.de> 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
Paul Hink [ Mo, 15 Mai 2006 16:32 ] [ ID #1315816 ]

Re: Punkt vor Strich

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

#!/usr/bin/perl -w

chomp ($eingabe = <STDIN>);
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
Axel Lindemann [ Mo, 15 Mai 2006 16:45 ] [ ID #1315817 ]

Re: Punkt vor Strich

Axel Lindemann schrieb:
> Wie gesagt, ich bin Anfänger, also seit nachsichtig. Wenn ich
>
> #!/usr/bin/perl -w
>
> chomp ($eingabe =3D <STDIN>);
> print $eingabe;
>
> 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. =DCbersetzung 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
Thomas Wittek [ Mo, 15 Mai 2006 16:51 ] [ ID #1315818 ]

Re: Punkt vor Strich

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
Axel Lindemann [ Mo, 15 Mai 2006 16:57 ] [ ID #1315819 ]

Re: Punkt vor Strich

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 [at] netlabs.com>
Markus Merkl [ Mo, 15 Mai 2006 17:32 ] [ ID #1315821 ]

Re: Punkt vor Strich

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 [at] adv.magwien.gv.at
Ferry Bolhar [ Mo, 15 Mai 2006 17:34 ] [ ID #1315822 ]

Re: Punkt vor Strich

Axel Lindemann <tmp2001 [at] arcor.de> 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.
frank [ Mo, 15 Mai 2006 17:31 ] [ ID #1315823 ]

Re: Punkt vor Strich

Axel Lindemann wrote:

> Wie gesagt, ich bin Anfänger, also seit nachsichtig. Wenn ich
>
> #!/usr/bin/perl -w
>
> chomp ($eingabe = <STDIN>);
> 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
Ferdinand Ihringer [ Di, 16 Mai 2006 13:19 ] [ ID #1317411 ]

Re: Punkt vor Strich

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
Ralf Muschall [ Mi, 17 Mai 2006 10:41 ] [ ID #1318947 ]

Re: Punkt vor Strich

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. ;-)
Ferdinand Ihringer [ Mi, 17 Mai 2006 13:21 ] [ ID #1318950 ]
Perl » de.comp.lang.perl.misc » Punkt vor Strich

Vorheriges Thema: Exporter nicht nötig?
Nächstes Thema: problem mit sleep?