in reply to Debug basic calculator syntax

Many others have answered your immediate question. I note that your code actually would do multiplication and addition.

You may be interested in another way of doing the calculator thing. You may be interested in adding some more operators to this example.

use strict; use warnings; while (1) { print "\nEnter a number to add or multiply or nothing to exit: "; my $first = <STDIN>; chomp $first; last if 0 == length $first; print "Enter a second number: "; my $second = <STDIN>; chomp $second; print "Enter the operator (+ or *): "; my $op = <STDIN>; chomp $op; if ($op =~ /^[+*]$/) {print "$first $op $second = " . eval ("$first $op $second") . "\n +";} else { print "$op is neither + nor *.\n"; next; } }

Perl is Huffman encoded by design.

Replies are listed 'Best First'.
Re^2: Debug basic calculator syntax
by anonymized user 468275 (Curate) on Jun 24, 2005 at 09:59 UTC
    Although the issue at hand might be to correct the above example code, forgive me if I mention the obvious - i.e. that for evaluating formulas read in as data, the eval function does seem rather suitable. Because it is functionally overkill, a filter function is also supplied in this quickie example:

    #!/usr/bin/perl do { print "CALC> "; printf "%f\n", eval( Filter(<>) ); } until 0; sub Filter { my $exp = shift; ( $exp =~ /^\s*exit/ ) and return $exp; ( $exp =~ /^\s*(\w+)/ ) and return 'print STDERR "$1 denied\n"'; return $exp; }

    example session:

    CALC> 0.7*0.9

    0.630000

    CALC> 0.6-0.8

    -0.200000

    CALC> mkdir freddy;

    mkdir denied

    CALC> exit

    $

    -S