Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Perl script not running conditional statements?

I know I'm a newb in Perl so please excuse my stupid mistakes. I am making a calculator that takes user input, but it isn't working. It runs fine and dandy until the if statement, when it reaches the if statement it just ends the program. I looked through forums and books but couldn't find anything.

use warnings;

print "number\n";
$number = <STDIN>;
# Asks the user for what number to calculate.

print "Second number\n";
$secnumber = <STDIN>;
# Asks the user for second number to calculate the first number with

print "Calculation\n Multiplication  x\n Addition  +\n Substraction  -\n ";
$calculation = <STDIN>;
# Asks the user for which calculation to make.

if ($calculation eq "x") {
    print "$number" . 'x' . "\n$secnumber" . '=' . "\n" . ($number * $secnumber);
} elsif ($calculation eq "+") {
    print "$number" . '+' . "\n$secnumber" . '=' . "\n" . ($number + $secnumber);
} elsif ($calculation eq "-") {
    print "$number" . '-' . "\n$secnumber" . '=' . "\n" . ($number - $secnumber);
}
# Displays the calculation and answer.
like image 329
user2898776 Avatar asked Jul 23 '26 19:07

user2898776


2 Answers

The value assigned to $calculation will contain a new line character. So on a unix type system the value assigned to $calculation would actually be +\n

you need to use the chomp function which will remove the new line character. you can find more information on chomp with this URL http://perldoc.perl.org/functions/chomp.html

You can apply chomp in two ways. You can have it chomp the new line at the time of reading it

chomp ($calculation = <STDIN>);

Or you can do it after the assignement.

$calculation = <STDIN>;
chomp ($calculation);

Also as a new user to Perl, i would recommend as well as using the warning pragma, you should also use the strict pragma to help you keep good maintainable code.

use warnings;
use strict;
like image 166
Chris Doyle Avatar answered Jul 26 '26 03:07

Chris Doyle


You need to do a chomp($calculation) before the if stmt and after the initial assignment operation. (the $calulation = <STDIN>;).

like image 27
Red Cricket Avatar answered Jul 26 '26 04:07

Red Cricket



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!