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.