Just put quotes around your hash keys, to avoid convertion.
use Data::Dumper;
use strict;
use warnings;
my $ENABLE = 0;
my $REQUIRE = 1;
my $DISABLE = 2;
my $DataRates = 'basic-2.0 1.0 basic-5.5';
my %DataRatesHash = ("1.0" => $DISABLE, "2.0" => $DISABLE, "5.5" => $
+DISABLE, "48.0" =>$DISABLE, "54.0"=>$DISABLE);
print Dumper(\%DataRatesHash);
foreach my $rate (split(/ /, $DataRates))
{
if(my ($rate1) = $rate =~/basic-(.+)/)
{
print "Data Rate 1 - $rate \n";
print "rate1 = $rate1\n";
$DataRatesHash{$rate1} = $REQUIRE;
print $DataRatesHash{$rate1};
print "\n";
}
else
{
print "Data Rate 2 - $rate \n";
$DataRatesHash{$rate} = $ENABLE;
print $DataRatesHash{$rate};
print "\n";
}
}
print Dumper(\%DataRatesHash);
print $DataRatesHash{"2.0"} ;
print $DataRatesHash{"1.0"} ;
print $DataRatesHash{"5.5"} ;
print $DataRatesHash{"48.0"} ;