my %keys = ( 'skc' => "clear-day", 'few' => "partly-cloudy-day", 'sct' => "partly-cloudy-day", 'bkn' => "cloudy", 'wind' => "wind", ); my $keys = join '|', map quotemeta, sort keys %keys; my $pattern = qr/(....)($keys)(...)/; while () { s/$pattern/$1$keys{$2}$3/; print; }