use Data::Dumper; my %date_hash = ( "Jan" => "01", "Feb" => "02", "Mar" => "03", "Apr" => "04", "May" => "05", "Jun" => "06", "Aug" => "07", "Sep" => "08", "Oct" => "10", "Nov" => "11", "Dec" => "12" ); my $file=".\\tmp.txt"; my $out=".\\out.txt"; open FILE, $file || die "Can't open file: $!"; open OUT, ">$out" || die "Can't open file: $!"; while(){ (m/(.+.WARNING)(.+)/g) while ( (my $key, my $value) = each(%date_hash)) { if (s/$key/$value/g) { } } } } close FILE; print Dumper($2); close OUT;