SheldonC
asked on
Per sub routine
I am working on a perl script that would print a value based on a menu option. Below is the menu option.
Select one of:
1. Print the Current Value
2. Add a number to current value
3. Subtract a number from the current value
4. Multiply the current value by a number
5. Divide the current value by a number
6. Raise the current value to a power
7. clear the current value to 0
8. Exit";
the problem i am having is with the loop. I want it loop until the user enter 8 to exit.
Select one of:
1. Print the Current Value
2. Add a number to current value
3. Subtract a number from the current value
4. Multiply the current value by a number
5. Divide the current value by a number
6. Raise the current value to a power
7. clear the current value to 0
8. Exit";
the problem i am having is with the loop. I want it loop until the user enter 8 to exit.
#!/usr/bin/perl
#use strict;
use warnings;
# Subroutine prototypes
sub do_exit();
sub current_value();
sub add_number();
sub subtract_number();
sub multiply_number();
sub divide_number();
sub raise_number();
sub clear_number();
$value=0;
# Print the menu selection
print "
Select one of:
1. Print the Current Value
2. Add a number to current value
3. Subtract a number from the current value
4. Multiply the current value by a number
5. Divide the current value by a number
6. Raise the current value to a power
7. clear the current value to 0
8. Exit";
print "\n";
# Get the user's input
$menu_item = <>;
while ($menu_item ne 4) {
chomp($menu_item);
# Define the actions to take
if ($menu_item == 1)
{
current_value();
}
elsif ($menu_item == 2)
{
add_number();
}
elsif ($menu_item == 3)
{
subtract_number();
}
elsif ($menu_item == 4)
{
multiply_number();
}
elsif ($menu_item == 5)
{
divide_number();
}
elsif ($menu_item == 6)
{
raise_number();
}
elsif ($menu_item == 7)
{
clear_number();
}
elsif ($menu_item == 8) {
do_exit();
}
else {
print "I didn't understand the command.\n";
do_exit();
}
exit 0;
}
#-------------------------------------------------------------
sub current_value() {
print $value;
print "\n";
return;
}
sub add_number() {
print "enter number to add,\n";
$number = <STDIN>;
$value = ($number +$value);
print $value,"\n";
return;
}
sub subtract_number() {
print "enter number to subtract,\n";
$number = <STDIN>;
$value = ($value-$number);
print $value,"\n";
return;
}
sub multiply_number() {
print "enter number to multiply,\n";
$number = <STDIN>;
$value = ($value*$number);
print $value,"\n";
return;
}
sub divide_number() {
print "enter number to divide,\n";
$number = <STDIN>;
if ($number ==0){
print "please choose number greater than 0, \n";
}
else {
$value = ($value/$number);
print $value,"\n";
}
return;
}
sub raise_number() {
print "enter number to multiply,\n";
$number = <STDIN>;
$value = ($value**$number);
print $value,"\n";
return;
}
sub clear_number() {
$value = (0);
print $value,"\n";
return;
}
sub do_exit() {
print "Exiting...\n";
return;
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Replace the code at line138 from:
sub do_exit() {
print "Exiting...\n";
return;
}
tosub do_exit() {
print "Exiting...\n";
exit(1);
}
ASKER
sorry,thanks I got it.
1) re-enable strict and declare all of your vars. The combination of the strict and warnings pragmas will catch lots of problems that might otherwise be missed and could be difficult to track down.
2) get rid of the empty prototype definitions.
3) create a dispatch table.
http://en.wikipedia.org/wi ki/Dispatc h_table
http://stackoverflow.com/q uestions/1 281456/how -do-i-impl ement-disp atch-table s-in-perl
4) use an infinate while loop which will exit when the user selects option 8 (that's when you call the do_exit() sub via the dispatch table.
2) get rid of the empty prototype definitions.
3) create a dispatch table.
http://en.wikipedia.org/wi
http://stackoverflow.com/q
4) use an infinate while loop which will exit when the user selects option 8 (that's when you call the do_exit() sub via the dispatch table.
Maybe I should give a brief reason as to why I made those suggestions.
This is obviously a class homework assignment and as it's written you will probably at best get a 'C' grade. The suggestions I made introduce better quality coding standards and if done correctly will be much easier to read and maintain and you will receive a much higher grade.
There are a couple improvements that I left out and can point them out if you wish.
This is obviously a class homework assignment and as it's written you will probably at best get a 'C' grade. The suggestions I made introduce better quality coding standards and if done correctly will be much easier to read and maintain and you will receive a much higher grade.
There are a couple improvements that I left out and can point them out if you wish.
ASKER