my $keysForRE = join '|', keys %date_hash; while(){ s/\b($keysForRE)\b/$date_hash{$1}/eg; my ($piece1, $piece2) = split /\bWARNING\b/, $_, 2; # do stuff to $piece1 # do stuff to $piece2 $_ = join 'WARNING', ($piece1, $piece2); }