The main problem is that you are never actually setting the values for
$to and
$from. Below, I've made a couple changes to your script so that these values are set. Also, I made a couple other changes, including adding a note so that the user gets a prompt when entering an unrecognized currency and chomping
$value so that the formatting of the output looks as you wanted it to.
#!/usr/bin/env perl
# convert3.pl
use warnings;
use strict;
my ( $value, $from, $to, $rate, $rates, %rates );
%rates = (
pounds => 1,
USD => 1.6,
marks => 3.0,
"french francs" => 10.0,
yen => 174.8,
"swiss francs" => 2.43,
drachma => 492.3,
euro => 1.5
);
print "Enter your starting currency: ";
OUTER0: while (<STDIN>) {
chomp;
INNER0: for my $cur (keys %rates) { # added keys so you don't loop t
+hrough values, too
$from = $cur; # set $from currency
last OUTER0 if $from eq $_;
}
print "Currency not recognized, try again: "; # Added to avoid con
+fusion when an unknown currency is entered
}
print "Enter your target currency: ";
OUTER1: while (<STDIN>) {
chomp;
INNER1: for my $cur (keys %rates) { # added keys so you don't loop t
+hrough values, too
$to = $cur; # set $to currency
last OUTER1 if $to eq $_;
}
print "Currency not recognized, try again: "; # Added to avoid con
+fusion when an unknown currency is entered
}
print "Enter your amount to convert: ";
$value = <STDIN>;
chomp $value; # added to fix format of output
$rate = $rates{$to} / $rates{$from};
print "$value $from is ", $value * $rate, " $to. \n";
__END__
Enter your starting currency: french francs
Enter your target currency: swiss francs
Enter your amount to convert: 100
100 french francs is 24.3 swiss francs.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.