Oliver Fuchs wrote:
Hi,

Hello,

I am a very beginner to perl so may be this question is stupid or too low
leveled then please ignore.

I tried to wright a little calculator in perl - nothing difficult - very
simple:

#!/usr/bin/perl -w

print "First value: ";
chomp ($value1=<STDIN>);
print "Second value: ";
chomp ($value2=<STDIN>);
print "What operator (+ - * /)? ";
chomp ($operator=<STDIN>);
if ($operator eq "+") {
        print ($value1 + $value2, "\n");
        } elsif ($operator eq "-") {
        print ($value1 - $value2, "\n");
        } elsif ($operator eq "*") {
        print ($value1 * $value2, "\n");
        } elsif ($operator eq "/") {
        print ($value1 / $value2, "\n");
        } else {
        print "Keep it simple \n";
        }

You could do something like this:


#!/usr/bin/perl -w use strict;

my %calc = (
    '+' => sub { return $_[0] + $_[1] },
    '-' => sub { return $_[0] - $_[1] },
    '*' => sub { return $_[0] * $_[1] },
    '/' => sub { return $_[0] / $_[1] },
    );

print 'First value: ';
chomp( my $value1 = <STDIN> );
print 'Second value: ';
chomp( my $value2 = <STDIN> );
print 'What operator (+ - * /)? ';
chomp( my $operator = <STDIN> );

if ( exists $calc{ $operator } ) {
    print $calc{ $operator }->( $value1, $value2 ), "\n";
    }
else {
    print "The operator '$operator' does not exist.\n";
    }


Originell I tried to put the operator from <STDIN> directly to print like
this:

[...]
print "First value: ";
chomp ($value1=<STDIN>;
print "Second Value: ";
chomp ($value2=<STDIN>;
print "Operator: ";
chomp ($value3=<STDIN>;

print ($value1 $value3 $value2, "\n");

But that was malfaunctioning. Is there a way to put the STDIN for the
operator directly in the print line or do I always have to keep it that long
winded?

You could always use the eval() function:

perldoc -f eval



John
--
use Perl;
program
fulfillment

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>




Reply via email to