Создайте регулярное выражение из ключей
my $regex = join '|', map quotemeta, keys %hash;
Затем используйте его для замены
s/($regex)/$hash{$1}/g;
Когда ключи имеют разную длину, вам может потребоваться сначала отсортировать их по длине перед созданием регулярное выражение.
Итак, полный пример:
#!/usr/bin/perl
use warnings;
use strict;
my %hash = (
case1 => 0.05,
case2 => 0.105,
case3 => -0.006,
case4 => -0.0005,
case5 => 0.0501,
);
my $regex = join '|', map quotemeta, keys %hash;
while (<DATA>) {
s/($regex)/$hash{$1}/g;
print;
}
__DATA__
set case1
set case5
set case3
set case4